0
私は、クラスに抽象クラスを受け入れるデータ構造を持っています。私はクラスを(クローンメソッドを介して)データ構造のプライベートフィールドの1つにコピーしたいので、構造の外に保管しておく必要はありません。 私はjsmithのでcplusplus.comにこの説明を見つけた:抽象基本クラスから派生クラスのc'torを呼び出す
// Depending upon your needs, you might not require a base class
// clonable concept. It would only be needed if you need to store
// clonable objects polymorphically.
struct clonable {
virtual ~clonable() {}
virtual clonable* clone() const = 0;
};
class Base : public clonable {
public:
virtual Base* clone() const
{ return new Base(*this); }
};
class Derived : public Base {
public:
virtual Derived* clone() const
{ return new Derived(*this); }
};
は、ここで私がこれまで持っているものです。
template <class T>
class AbstractBase {
public:
virtual AbstractBase<T>* clone() const = 0;
virtual int operator()(const T& lhs, const T& rhs) const = 0;
};
template <class T>
class Derived : public AbstractBase<T> {
public:
Derived* clone() { return new Derived(*this); } /* ERROR: can't instantiate abstract class */
int operator()(const T& lhs, const T& rhs) const { return something; }
};
template <class T>
class DataStructure {
public:
DataStructure(AbstractBase<T>* base) : base(base->clone()) {}
//...
private:
AbstractBase<T>* base;
}
私はそれがAbstractBase
のc'torを呼んだ実現しています。 AbstractBase
を抽象的に保ちながらこれを修正するためのエレガントかつ/または簡単な方法はありますか?
うわーソースからコピーしている間に私は同じミスを犯しました! – itchy23