2012-04-28 188 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()); 
}