如何为派生类实现复制构造函数
How to generically implement copy constructor for derived classes?
我想在以下类A上实现复制构造函数,其中包含指向多态性实现类的指针。目前,我在类基础中有一个virtual create_copy()方法,派生的类需要覆盖。但是,派生类的覆盖都使用完全相同的代码。我是否缺少一种复制A类型对象的更简单的方法?我真的需要为每个派生类复制完全相同的代码吗?以下是我现在正在使用的。如果它更改答案,则需要运行时多态性。
class A {
public:
A(const A& a): base_p {a.base_p->create_copy()} {}
private:
unique_ptr<Base> base_p;
};
class Base {
public:
virtual unique_ptr<Base> create_copy() const;
};
class Derived : public Base {
public:
unique_ptr<Base> create_copy() const override {
return make_unique<Derived>(*this);
}
};
我参与使用一些代码的一个想法:
return make_unique<remove_reference_t<decltype(*this)>>(*this);
但是,此代码在const成员函数中不起作用。另外,我认为我仍然必须明确覆盖每个派生类中的create_copy()方法,因为在编译时评估了dectType(*this),因此将该代码放入基类方法中不会对我有任何好处。p>编辑:奇怪地重复的模板模式多态副本(C )的遗传答案比我需要的要复杂。我很简单深度1的继承层次结构绝对不需要扩展到更大的深度。Iorro的答案以及提供的链接足以解决我的问题。
- 有一个中间的碱基图模板类
- t in It t in exeral create_copy()
- 使其源于基础
- 让得出源自碱基的衍生
这称为CRTP,被广泛使用。请注意,您可能需要在baseimplcopy中static_cast(this)。
btw,create_copy()通常称为clone()。
相关文章:
- 为共享 ptr 向量实现复制 c'tor?
- 使用共享指针实现复制 c'tor?
- 如何在双向链表上实现复制赋值?
- 实现不可复制的C++类
- 在C++中正确实现复制构造函数
- 如何在模板容器类中实现复制构造函数和赋值运算符
- 在单个链接列表中实现复制构造函数C
- 如何为具有自引用指针的类实现复制构造函数/赋值运算符
- 为什么完美的转发(全部捕获)不能实现复制分配?
- 在 C++11 中实现复制和交换习语的更好方法
- 如何为派生类实现复制构造函数
- 复制/移动操作符是否可以安全地用于实现复制/移动分配操作符
- C++实现复制构造函数
- 为什么使用 swap 来实现复制分配
- 使用桥接模式 c++ 实现复制构造函数
- PFArrayD.cpp实现复制构造函数
- 为简单向量实现复制构造函数
- 实现复制构造函数
- 矢量实现复制构造函数错误
- 根据move构造函数实现复制赋值操作符