私はこれがあなたが望むように可能だとは本当に思いません.C++のポリモーフィズムはこのようには機能しません.
私がよく理解していれば、Factory パターンを使用せずに、パラメーターの型に応じて、Derived1 または Derived2 のどちらになるかを Base が決定するように宣言された変数が必要です。
これが不可能な理由は、Base
クラスがそのクラスの存在を実際に認識しておらずDerived
、スタック変数を宣言して派生クラスとして「動作」させることができないためです。ただし、回避策を提案することはできますが、これは、必要な実際のクラス階層の期待をすべて満たすわけではありません (本当にそのようにしたい場合は_:
class Facade{
public:
Facade(int foo) : b(new Derived1(foo)){}
Facade(bool foo) : b(new Derived2(foo)){}
Base Value()
{
return *b;
}
private:
Base* b;
};
そして、次のようなことができます:
Facade foo(10);
Facade bar(true);
int x = (reinterpret_cast<Derived1*>(foo.Value())) -> val;
bool y = (reinterpret_cast<Derived2*>(bar.Value())) -> val;