2012-04-28 183 views
2

創建的std ::陣列我想實現這樣的事情:從可變參數模板

#include <string> 
#include <array> 

enum class MyEnum{ 
    A, 
    B, 
    C 
}; 

template<MyEnum... Args> 
class MyClass{ 
    public: 
    MyClass() 
    { 
    } 
    private: 
    std::array<MyEnum, sizeof...(Args)> array; 
}; 

現在我有一個數組,可容納所有傳遞給模板值。但我怎樣才能用模板參數填充這個數組?

+0

您不能使用字符串作爲模板參數。 – kennytm 2012-04-28 15:55:51

+0

好點!我會糾正這個例子。 – Dejwi 2012-04-28 16:07:06

+0

@MiniKarol請看看我更新的答案。接受的答案不如更新的答案(謝謝Xeo)。 – 2012-04-28 17:09:18

回答

6

如果你正在想是把所有的MyEnum值到array,那麼你可以 解包成一個初始化器列表,並用它初始化 array 直接初始化初始化它:

MyClass() : array {{ Args... }} { } 

但是,您需要一個相當新的編譯器才能使用此語法。

感謝Xeo糾正我的答案。

+0

這不會工作,因爲'std :: array'沒有接受'std :: initializer_list'的構造函數。 – 2012-04-28 16:41:23

+0

@ n.m。哦,這似乎很奇怪。爲什麼'array a {1,2,3,4};'然後呢? – 2012-04-28 16:47:00

+1

@Seth:直接初始化,'std :: array'是一個POD類型。你可以在成員初始化程序btw中使用相同的語法。 – Xeo 2012-04-28 16:47:31

1
MyClass() 
{ 
    std::initializer_list<MyEnum> il({Args...}); 
    std::copy (il.begin(), il.end(), array.begin()); 
}