抽象クラスの入力パラメーターを変更せずに、特定の階層内の派生クラスに対して機能する関数を作成したいと考えています。
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 を使用する必要がありますか?