C++ 呼叫c';抽象基类派生类的tor
我有一个数据结构,它接受c'tor中的抽象类。我想将类(通过克隆方法)复制到数据结构的一个私有字段中,这样就不必一直将其存储在结构之外。 我在jsmith的网站上找到了这样的解释:C++ 呼叫c';抽象基类派生类的tor,c++,abstract-class,C++,Abstract Class,我有一个数据结构,它接受c'tor中的抽象类。我想将类(通过克隆方法)复制到数据结构的一个私有字段中,这样就不必一直将其存储在结构之外。 我在jsmith的网站上找到了这样的解释: // 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 pol
// 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;
}
模板
类抽象库{
公众:
虚拟抽象库*clone()常量=0;
虚拟整数运算符()(常数T&lhs,常数T&rhs)常数=0;
};
模板
派生类:公共抽象库{
公众:
派生的*clone(){返回新的派生(*this);}/*错误:无法实例化抽象类*/
int运算符()(常量T&lhs,常量T&rhs)常量{return something;}
};
模板
类数据结构{
公众:
数据结构(AbstractBase*base):base(base->clone()){}
//...
私人:
抽象基*base;
}
我意识到这是在呼唤AbstractBase
的指挥官。在保持AbstractBase
abstract的同时,是否有一种优雅和/或简单的方法来修复此问题?您需要覆盖
Derived* clone() const;
注意您需要覆盖的常量
Derived* clone() const;
注意
const
哇,我很高兴我在从源代码复制时犯了同样的错误!哇,我很高兴我在从源代码复制时犯了同样的错误!