从抽象基类调用派生类的 c'tor

Call c'tor of derived class from abstract base class

本文关键字:tor 抽象 基类 调用 派生      更新时间:2023-10-16

我有一个数据结构,它接受c'tor中的抽象类。我想将类(通过克隆方法)复制到数据结构的私有字段之一,这样我就不必在结构外存储它。我在jsmith的cplusplus.com上找到了这个解释:

// 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'。是否有一个优雅和/或简单的方法来解决这个问题,同时保持AbstractBase抽象?

你需要重写

Derived* clone() const;

注意const