抽象クラスでコピー アンド スワップ イディオムを使用しようとすると、興味深いエラーが発生しました。次のコードは、この状況を示すために特別に作成されたものです。不適切なことがあれば教えてください。
template <typename T> class iter
{
public:
iter();
virtual ~iter();
iter(const iter &);
iter(iter &&) noexcept;
iter& operator=(iter);
virtual void swap(iter &);
virtual bool operator!=(const iter&);
virtual bool operator==(const iter&);
virtual bool operator++() = 0;
virtual bool operator--() = 0;
private:
T* pointer;
};
エラーメッセージは次のとおりです。
iterator.h:10:18: error: cannot declare parameter to be of abstract type 'iter<T>'
iter& operator=(iter);
^
iterator.h:3:28: note: because the following virtual functions are pure within 'tier':
iterator.h:15:15: note: virtual bool iter<T>::operator++()
virtual bool operator++() = 0;
^
iterator.h:16:15: note: virtual bool iter<T>::operator--()
virtual bool operator--() = 0;
明らかにこの行がこのエラーを引き起こしているので、ここではなく派生クラスで宣言する必要がありますか、それとも他の高度な手法がありますか?
iter& operator=(iter);