純粋な仮想インターフェイスを提供する基本クラスがあります。私は、基本クラスへのポインタのリストに、派生クラスのオブジェクトへのポインタを格納する必要があります。派生クラスのテンプレート引数を使用する基本クラス
派生クラスは、テンプレートメカニズムを使用して作成されます。問題は、派生クラスだけが知っている型を返すための仮想インタフェースを用意したい場合、テンプレート引数として渡す必要があることです。ジレンマが始まるこれは...
template <typename ITEM>
class base {
public:
virtual ITEM* get() = 0;
};
template <typename ITEM>
class derived : public base<ITEM>{
public:
ITEM* get() {...};
};
である。しかしベースにテンプレートを使用するとき、私は、ベースポインタのリストを作成する場合でも、これを知っておく必要があります。もちろん
base* myList[10] = {derived1, derived2,...}
私はしないでください私のリストを定義するときにそのタイプを知っている。だから私は何とか私の基本クラスのテンプレートを取り除く必要があります。
編集:このアプローチは、まったく有用なアプローチではなかったので、このアプローチを廃止しました。だからこの問題の解決策はありません。
あなたは何とか 'myList'を設定したとしましょう。あなたはそれをどのように使用する予定ですか?あなたは 'myList [5] .get()'と呼ぶことができますが、どのような型であるのかわからないときはどうしますか? –
たぶんあなたは 'dynamic_cast'をチェックすることができますが、テンプレートではうまくいくかどうかわかりませんが – Ceros
これはあなたが持っているかもしれませんが、**間違った理由で(http: /meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – StoryTeller