-6

我想制作一个包含多个模板对象的数组。

例如,如何使数组填充这两个对象:

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 回答