【问题标题】:Array of template class object [closed]模板类对象数组[关闭]
【发布时间】:2012-11-16 05:02:00
【问题描述】:

我想创建一个包含多个模板对象的数组。

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

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

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

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

谢谢!

【问题讨论】:

  • 帖子显示的是函数声明。对象在哪里?
  • 问题含糊不清。请尝试whathaveyoutried.com
  • std::vectorBoost Any?
  • @aleguna myArray[0] = FooItem; myArray[1] = FooItem2;

标签: c++ templates object pointers


【解决方案1】:

我假设您的意思是您想要一个能够容纳不同类型对象的数组。一个简单的数组无法做到这一点,因为所有元素都必须属于同一类型,而 void* 不会有太大用处,因为无法确定任何对象的类型,因此无法做任何有用的事情和他们一起。

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

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

【讨论】:

    【解决方案2】:

    您可以使用成对的向量:

    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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 2018-06-12
      • 2014-10-15
      • 1970-01-01
      相关资源
      最近更新 更多