我有一個非類型模板類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