我想编写一个适用于特定层次结构中的任何派生类的函数,而无需修改抽象类输入参数:
class A {
public:
A(int val): m_i(val) { }
virtual void add(int i) = 0;
int m_i;
};
class B: public A {
public:
B(int val): A(val) { }
B(): A(0) { }
virtual void add(int i) { m_i += i; }
};
class C: public A {
public:
C(int val): A(val) { }
C(): A(0) { }
virtual void add(int i) { m_i += i*2; }
};
int f(const A& base_class)
{
// how to create a concrete copy of class base_class?
base_class.add(5);
}
这里 f() 应该适用于 B 和 C,但我无法创建具体类的副本,因为我不知道实际类型,除非我使用 dynamic_cast。
是否有另一种方法来解决这个问题或者应该只使用dynamic_cast?