使用arg,*和*作为数组实例化C ++模板化类

时间:2013-09-17 16:08:34

标签: c++ arrays templates instantiation argument-passing

我有一个C ++模板化类,其构造函数有一个默认参数。

可以使用非默认arg,作为数组进行实例化吗? (如果没有,为什么不呢?)

任何一个都可以,但不能同时使用(在g ++ 4.6.3中):

template <class T> class Cfoo {
  public:
    int x;
    Cfoo(int xarg=42) : x(xarg) {}
};

Cfoo<int> thisWorks[10];
Cfoo<int> thisWorks(43);
Cfoo<int> thisFails(43)[10];
Cfoo<int> thisFails[10](43);
Cfoo<int>[10] thisFails(43);
// (even crazier permutations omitted)

2 个答案:

答案 0 :(得分:1)

您无法使用非默认构造函数创建数组。

答案 1 :(得分:1)

你是对的:你只能在数组中默认构造元素,而你可以将任何你想要的参数传递给单个对象构造。

如果您需要一个集合,在C ++ 98中可以使用std::vector

std::vector<Cfoo<int> >(10, 43);