数组非类型模板?

时间:2014-01-24 11:06:25

标签: c++ arrays templates

我有一个非类型模板类Foo:

template <int n>
class Foo {
public:
  Foo(){}
};

如何在一个数组中存储该类的多个实例? (当实例都具有不同的模板值时。)

然而,这不起作用:

Foo<int> myArray[] = {Foo<1>() , Foo<2>() , Foo<3>()};

编译器错误是:非类型模板参数的模板参数必须是       表达式

3 个答案:

答案 0 :(得分:6)

Foo<1>Foo<2>的类型不同(依此类推), 所以你不能将它们存储在一个数组中(如果它们来自FooBase,你可能有一个FooBase*数组。)

您可以将它们存储在std::tuple

auto foos = std::make_tuple(Foo<1>() , Foo<2>() , Foo<3>());

答案 1 :(得分:1)

template <int n>
class Foo : public Ifoo {
public:
  Foo(){}
};

IFoo* myArray[] = {..

答案 2 :(得分:1)

如上所述,Foo<1>Foo<2>等不同,因此您无法将它们存储在数组中。

为了解决这个问题,您可以对类进行去模板化,并使整数成为构造函数参数:

class Foo {
public:
  Foo(int n){}
};

Foo myArray[] = {Foo(1) , Foo(2) , Foo(3)};