多くの派生クラスが存在する基本クラスがあります。ただし、プログラムのコンテナーに格納されているのは基本クラスへのポインターであるため、それらを反復して仮想関数を呼び出すことができます。
このコンテナーに基本クラス ポインターを追加する別のクラスがあるため、派生クラスが(ヌードnew
ではなく) edの場合、それらは基本クラス ポインターとして返されるか格納される必要があります。
テンプレートを使用して、これを行う単純な基本クラスの Factory メソッドを作成することを考えていました。
template<class T> //T is the derived class
static T* Factory(){
return static_cast<T*>(functionThatAddsBaseClassPointerToContainer(new T));
}
主な長所と短所が 2 つあります。
利点: すべての派生クラスでこれをオーバーライドする必要はありません
T
短所:私のベースから派生していないクラス型として渡すことにより、誤って使用される可能性があります。
T
この関数内で派生していることを確認する方法はありますFactory
か? T
または、コンパイラが派生していないインスタンスをキャッチすることを期待できますか?
この一般的なアプローチは受け入れられるアイデアですか、それともより良い代替案はありますか?