模板类对象的数组

时间:2012-11-28 10:59:37

标签: c++ templates object pointers

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

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

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

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

void *指针数组?经典阵列?

谢谢!

2 个答案:

答案 0 :(得分:2)

我假设你的意思是你想要一个能够容纳不同类型对象的数组。一个简单的数组不能这样做,因为所有元素必须是相同的类型,并且void*没有多大用处,因为无法确定任何对象的类型,因此无法做到任何对他们有用的东西。

根据您打算如何使用数组中的对象,各种可能性包括:

  • 定义一个公共基类,并存储指向它的指针。如果基类是多态的,则可以使用虚拟函数dynamic_casttypeid与对象进行交互。
  • Boost.Variant可以存储任何预定义类型的对象。这些可以存储在一个数组中,效率很高(不需要额外的重定向),并且可以在没有强制转换的情况下以类型安全的方式访问。
  • Boost.Any可以存储任何类型的对象。

答案 1 :(得分: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];