2014-01-24 139 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)};