2

)

具体的なテンプレート引数の型がわからないテンプレート化されたクラスへの参照またはポインターを作成する方法を考えています。

たとえば、私は持っています

vector<int>   a;
vector<float> b;

ここで、a または b への参照、またはベクトルのその他の特殊化を保持できる変数 (この場合は c) を作成できるようにしたいと考えています。たとえば、次のようになります。

vector<>& c; // <- generic reference to all specializations of class vector<T>
c = a;
cout << c.size() << endl;

c = b;
cout << c.size() << endl;

テンプレート化された型の引数を受け取ったり返したりする push_back やその他の操作を呼び出すことができないという事実を認識していますが、 size() などの知識を必要としないメソッドを呼び出したいだけです具体的なテンプレート引数。

事前にご協力いただきありがとうございます。

4

2 に答える 2

0

あなたが望むのはランタイムポリモーフィズムです。テンプレートを使用するかどうかに関係なく、C++ では、これは継承と仮想メソッドを介してのみ行うことができます。

したがって、唯一のオプションは、基本インターフェイスを作成してから、基本クラスを継承するテンプレート化されたクラスを作成することです。特殊化されたすべてのクラスは、継承された同じクラスを共有し、そこから仮想関数を呼び出すことができます。

残念ながら、テンプレート化されたクラス ( など) を制御できない場合、このメソッドを使用することはできません。vectorそのため、共通の動作を提供する新しいクラスを構築し、その下でキャストを実行しない限り、この場合にこれを行う方法はありません。フード(型消去は、それを「自動的に」行うブーストテンプレート化された方法ですが、特定のケースでは自分でクラスを書きたいと思います)。

ここでの私の投稿はあなたに興味があるかもしれません。

于 2013-06-29T00:39:53.987 に答える