次のような 3 つのクラスがあるとします (これは例であるため、コンパイルされません!)。
class Base
{
public:
Base(){}
virtual ~Base(){}
virtual void DoSomething() = 0;
virtual void DoSomethingElse() = 0;
};
class Derived1
{
public:
Derived1(){}
virtual ~Derived1(){}
virtual void DoSomething(){ ... }
virtual void DoSomethingElse(){ ... }
virtual void SpecialD1DoSomething{ ... }
};
class Derived2
{
public:
Derived2(){}
virtual ~Derived2(){}
virtual void DoSomething(){ ... }
virtual void DoSomethingElse(){ ... }
virtual void SpecialD2DoSomething{ ... }
};
実行時まで利用できない設定に応じて、Derived1 または Derived2 のインスタンスを作成したいと考えています。
実行時まで派生型を判断できないため、次のことは悪い習慣だと思いますか?...
class X
{
public:
....
void GetConfigurationValue()
{
....
// Get configuration setting, I need a "Derived1"
b = new Derived1();
// Now I want to call the special DoSomething for Derived1
(dynamic_cast<Derived1*>(b))->SpecialD1DoSomething();
}
private:
Base* b;
};
私は一般的に、dynamic_cast の使用法が悪いと読んでいますが、前述したように、実行時までどのタイプを作成すればよいかわかりません。助けてください!