class A {...}
class B : public A {...}
class C : public A {...}
void M(A* a) {
A* aa = new B(* a)
...
}
int main()
{
B b = new B();
M(b);
...
}
所以我想做的是调用传递给M的对象(“a”)的复制构造函数,而不必知道它是B类还是C类等(而不是“new B(a)” “ 如上)。
当然,我可以使用动态强制转换并检查null ptr等或使用typeid,但必须有更简单的方法吗?
提前致谢。
答案 0 :(得分:2)
获得相同效果的一种方法是使用clone()
模式。为A类提供一个复制它的虚函数,覆盖每个子类中的该函数。通过引用将A的实例传递给您的函数,然后在该函数中clone
。有点乱,但有效。