C++ 呼叫c';抽象基类派生类的tor

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

我有一个数据结构,它接受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 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

哇,我很高兴我在从源代码复制时犯了同样的错误!哇,我很高兴我在从源代码复制时犯了同样的错误!