C++ 非类型模板的数组?

C++ 非类型模板的数组?,c++,arrays,templates,C++,Arrays,Templates,我有一个非类型模板类Foo: template <int n> class Foo { public: Foo(){} }; 模板 福班{ 公众: Foo(){} }; 如何在一个数组中存储该类的多个实例?(当所有实例都具有不同的模板值时。) 但是,这不起作用: Foo<int> myArray[] = {Foo<1>() , Foo<2>() , Foo<3>()}; Foo myArray[]={Foo(),Foo(),F

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

template <int n>
class Foo {
public:
  Foo(){}
};
模板
福班{
公众:
Foo(){}
};
如何在一个数组中存储该类的多个实例?(当所有实例都具有不同的模板值时。)

但是,这不起作用:

Foo<int> myArray[] = {Foo<1>() , Foo<2>() , Foo<3>()};
Foo myArray[]={Foo(),Foo(),Foo()};
编译器错误为:非类型模板参数的模板参数必须为 表达式

模板
Foo类:公共Ifoo{
公众:
Foo(){}
};
IFoo*myArray[]={。。
模板
Foo类:公共Ifoo{
公众:
Foo(){}
};
IFoo*myArray[]={。。
Foo
Foo
的类型不同(依此类推), 因此,您不能将它们存储在数组中(如果它们来自
FooBase
,那么您可能有一个
FooBase*
数组)

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

auto foos = std::make_tuple(Foo<1>() , Foo<2>() , Foo<3>());
auto foos=std::make_tuple(Foo(),Foo(),Foo());
Foo
Foo
的类型不同(依此类推), 因此,您不能将它们存储在数组中(如果它们来自
FooBase
,那么您可能有一个
FooBase*
数组)

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

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

如前所述,
Foo
Foo
等不同,因此不能将它们存储在数组中

要解决此问题,您可以对类进行反模板处理,并将整数改为构造函数参数:

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

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

如前所述,
Foo
Foo
等不同,因此不能将它们存储在数组中

要解决此问题,您可以对类进行反模板处理,并将整数改为构造函数参数:

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

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

你不能。它们都是不同的类型。类模板不是类。你不能。它们都是不同的类型。类模板不是类。那不是存储类的实例,而是存储指针。你是说
Ifoo*myArray[]={…
?那不是存储类的实例,而是存储指针。你是说
Ifoo*myArray[]={…