gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:01:25 25 4
gpt4 key购买 nike

我有一个数据结构,它在 c'tor 中接受一个抽象类。我想将该类(通过克隆方法)复制到数据结构的私有(private)字段之一,这样我就不必一直将它存储在结构之外。我在 cplusplus.com 上找到了这个解释通过 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;
}

我意识到它正在调用 AbstractBase 的 c'tor。有没有一种优雅和/或简单的方法来解决这个问题,同时保持 AbstractBase 抽象?

最佳答案

你需要覆盖

Derived* clone() const;

注意 const

关于c++ - 从抽象基类调用派生类的c'tor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8497033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com