繁体   English   中英

模板参数包属性

[英]Template parameter pack attribute

我们有模板类:

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

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

template<int... is>
Pack
{

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

或者如何收集A类?

以示例使用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;
 }

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

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

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

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

template<class> struct vectors_of;

template<class...As> struct vectors_of<type_list<As...>>{
     using type=type_list<std::vector<As>...>;
};
using vectors_of_a = typename vectors_of<a_pack<1,2>>::type;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM