我有一个非类型模板类Foo:非类型模板数组?
template <int n>
class Foo {
public:
Foo(){}
};
我怎么能是类的多个实例存储在一个阵列? (当实例都具有不同的模板值。)
然而,这不工作:
Foo<int> myArray[] = {Foo<1>() , Foo<2>() , Foo<3>()};
编译错误是:用于非类型模板参数模板参数必须是 表达式
我有一个非类型模板类Foo:非类型模板数组?
template <int n>
class Foo {
public:
Foo(){}
};
我怎么能是类的多个实例存储在一个阵列? (当实例都具有不同的模板值。)
然而,这不工作:
Foo<int> myArray[] = {Foo<1>() , Foo<2>() , Foo<3>()};
编译错误是:用于非类型模板参数模板参数必须是 表达式
Foo<1>
是不相同的类型Foo<2>
(等), 所以不能将它们存储阵列中(如果它们派生d从FooBase
,你可能有一组FooBase*
)。
您可以将它们存储在一个std::tuple
:
auto foos = std::make_tuple(Foo<1>() , Foo<2>() , Foo<3>());
template <int n>
class Foo : public Ifoo {
public:
Foo(){}
};
IFoo* myArray[] = {..
这不是存储一个类的实例,而是存储指针。 – juanchopanza
你的意思是'Ifoo * myArray [] = {...'? – Greg
@ Greg - 是的,你说得对,谢谢! –
正如已经提到的,Foo<1>
是一个不同类型Foo<2>
等等等等,所以你不能把它们存储在阵列中。
要解决这个问题,你可以去模板类,使整数构造函数的参数,而不是:
class Foo {
public:
Foo(int n){}
};
Foo myArray[] = {Foo(1) , Foo(2) , Foo(3)};
你不能。它们都是不同的类型。类模板不是一个类。 – juanchopanza