-6

複数のテンプレートオブジェクトの配列を作成したいと思います。

たとえば、次の2つのオブジェクトで満たされた配列を作成する方法:

Foo< A, B, C > FooItem (bar_, bor_);
Foo < D, E, F > FooItem2 (bur_, ber_);

myArray[0] = FooItem;
myArray[1] = FooItem2;

void *ポインタの配列?古典的な配列?

ありがとう !

4

2 に答える 2

2

さまざまなタイプのオブジェクトを保持できる配列が必要だということだと思います。すべての要素が同じ型である必要があるため、単純な配列ではそれができません。またvoid*、オブジェクトの型を判別する方法がないため、あまり役に立ちません。

配列内のオブジェクトの使用方法に応じて、次のようなさまざまな可能性があります。

  • 共通の基本クラスを定義し、それへのポインターを格納します。基本クラスがポリモーフィックである場合、仮想関数を使用するかdynamic_casttypeidオブジェクトと対話することができます。
  • Boost.Variantは、定義済みの型のセットのいずれかからオブジェクトを格納できます。これらは配列に格納でき、効率的 (追加のリダイレクトを必要としない) であり、キャストなしでタイプセーフな方法でアクセスできます。
  • Boost.Anyは、任意の型のオブジェクトを格納できます。
于 2012-11-28T11:17:38.270 に答える
0

ペアのベクトルを使用できます。

std::vector< std::pair< Foo<A, B, C>, Foo<D, E, F> > > array;

代わりにプレーンなデータ配列が必要な場合:

std::pair< Foo<A, B, C>, Foo<D, E, F> > array[size];
于 2012-11-28T11:07:56.003 に答える