タイプがいくつかの制約に依存するメンバーがある場合、どのようにポリモーフィズムを設計しますか。
私がこれを持っているとしましょう:
template<typename T>
class Base
{
public:
Base() = default;
virtual ~Base() = default;
T member;
};
class DerivedA : public Base<int>
{
public:
DerivedA() {member = 5;}
};
class DerivedB : public Base<float>
{
public:
DerivedB() = default;
};
さまざまなパラメーターに応じて新しい派生オブジェクトを作成できるようにしたい、つまり:
Base *b;
if (something)
b = new DerivedA();
else
b = new DerivedB();
の宣言にテンプレート パラメーターを指定する必要があるため、明らかにこれを行うことはできませんb
。
これは悪いデザインですか?これをどのように処理しますか?
小さなラッパーを書くことができます:
class Wrapper() {};
template<typename T>
class Base : public Wrapper
{
// ...
};
Wrapper a, b;
a = new DerivedA;
b = new DerivedB;
ただし、またはmember
で宣言された他のメソッドに直接アクセスすることはできません。: をキャストする必要があり、ポリモーフィズムが役に立たなくなります。Base
Derived
reinterpret_cast<DerivedA*>(a)->member
ありがとう