2014-01-24 68 views
1

我有一个非类型模板类Foo:非类型模板数组?

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

我怎么能是类的多个实例存储在一个阵列? (当实例都具有不同的模板值。)

然而,这不工作:

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

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

+3

你不能。它们都是不同的类型。类模板不是一个类。 – juanchopanza

回答

6

Foo<1>是不相同的类型Foo<2>(等), 所以不能将它们存储阵列中(如果它们派生d从FooBase,你可能有一组FooBase*)。

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

auto foos = std::make_tuple(Foo<1>() , Foo<2>() , Foo<3>()); 
1
template <int n> 
class Foo : public Ifoo { 
public: 
    Foo(){} 
}; 

IFoo* myArray[] = {.. 
+0

这不是存储一个类的实例,而是存储指针。 – juanchopanza

+1

你的意思是'Ifoo * myArray [] = {...'? – Greg

+0

@ Greg - 是的,你说得对,谢谢! –

1

正如已经提到的,Foo<1>是一个不同类型Foo<2>等等等等,所以你不能把它们存储在阵列中。

要解决这个问题,你可以去模板类,使整数构造函数的参数,而不是:

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

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