从variadic模板创建std :: array

时间:2012-04-28 15:22:57

标签: c++ templates c++11 variadic-templates

我想实现类似的目标:

#include <string>
#include <array>

enum class MyEnum{
  A,
  B,
  C
};

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

现在我有一个数组,可以保存所有传递给模板值的数组。但是如何使用模板参数填充此数组?

2 个答案:

答案 0 :(得分:6)

如果你想要的是将所有MyEnum值放入array,那么你可以将它们解压缩到初始化列表中并用它初始化array 通过直接初始化来初始化

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

但是,您需要一个相当新的编译器才能使用此语法。

感谢Xeo纠正我的回答。

答案 1 :(得分:1)

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