我们有一个Base类和一个Derived派生自Base.
在其他一些类中,我们希望有一个 type 的成员shared_ptr<Base>。
我们不能Base直接使用该类型,因为这样的直接复制会排除子类。
但是,我们仍然想Base在构造时“复制”(或子类)对象,因为我们想排除它被修改的可能性。
处理这个问题的经典方法是将一个虚拟成员函数clone()放入Base类中,Base然后每个子类都可以实现。然后Everyclone()将返回其自身的“副本” - 例如,Derived将 return make_shared<Derived>(*this)。
这种方法的问题在于,这需要每个新的子类Base来实现这个clone()功能。每个中的代码都clone()相当样板,一直重复它似乎有点不自然。
自 C++11 以来有更好的方法来做到这一点吗?