[英]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.