C++ 非类型模板的数组?
我有一个非类型模板类Foo: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
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[]={…
?