我有一个非类型模板类Foo:
template <int n>
class Foo {
public:
Foo(){}
};
如何在一个数组中存储该类的多个实例? (当实例都具有不同的模板值时。)
然而,这不起作用:
Foo<int> myArray[] = {Foo<1>() , Foo<2>() , Foo<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)};