从抽象基类调用派生类的 c'tor
Call c'tor of derived class from abstract base class
我有一个数据结构,它接受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
相关文章:
- 无法创建抽象类的实例
- 如何定义一个纯抽象基类
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 用pybind11包装C++抽象类时出错
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 抽象类错误,请参阅声明" "是抽象的
- 将自定义函数传递到基抽象类中以延迟执行
- 命名参数习惯用法和(抽象)基类
- 打印抽象对象 c++
- 我叫删除,但我的d-tor没有叫,为什么?
- 如何在从抽象基派生的类中实现相同的方法?
- 将包含抽象类和普通类C++包导出到 Python
- C++:处理抽象类中的错误时出现问题
- 为共享 ptr 向量实现复制 c'tor?
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 使用共享指针实现复制 c'tor?
- C++抽象的字节序是中立的吗?
- c'tor 和 d'tor 从抽象基础通过其他抽象类继承到具体
- 从抽象基类调用派生类的 c'tor