模板参数包属性

时间:2016-10-23 14:59:34

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

我们有模板类:

template<int i>
class A
{
...
};

但是如何声明模板类的包装器:

template<int... is>
Pack
{

private:
    A<is...> attrs;
};

或者如何收集A类?

2 个答案:

答案 0 :(得分:9)

使用std::tuple,例如

#include <tuple>

template <int i>
class A
 { };

template <int... is>
class Pack
 { std::tuple<A<is>...>  attrs; };

int main()
 {
   Pack<2,3,5,7,11,13>  p;
 }

另一种方式可以通过继承

template <int i>
class A
 { };

template <int... is>
class Pack : A<is>...
 { };

int main()
 {
   Pack<2,3,5,7,11,13>  p;
 }

答案 1 :(得分:3)

我所知道的最佳方法是使用类型列表

name="dob-year"

使用类型列表,很容易执行转换或 对每个成员进行操作。例如,让我们使用前面的代码创建一个std:vector的type_list:

template<class...> struct type_list{};

template<int...Is>
using a_pack = type_list<A<Is>...>;

他们有很多关于类型列表的文档。这是基本工具之一 本书以来的元程序员:现代C ++设计(使用pre-c ++ 11)。使用C ++ 11,它更容易使用它。