tuple解包给类的构造函数

首先我们的第一步当然是将tuple解包。tuple提供了一个get函数来获取第N个元素。例如:
get<1>(make_tuple(...));
要将一个tuple全部拆解,就可以使用通过多次调用这个函数来进行解析,例如:
auto tup = make_tuple(..........);
func( get<0>(tup),get<1>(tup),get<2>(tup)......get<n>(tup) );
而实际上,0,1,...n这个数列我们可以构建一个std::index_squence<0,1,2,...,n>,而其中,n = std::tuple_size< decltype(tup) >::value -1,然后我们通过
template<size_t ...i,typename T> 
auto func( std::index_squence<i...>, T&& t )
{
  return funcc_(get<i>(t)...);
}
这种方式就能将tuple的全部元素进行解包。其中std::index_squence<0,1,2,...,n>由std::make_index_sequence<n+1>来获得。
那么现在开始解包给类的构造函数了,若有如下情景:
auto tup = make_tuple(...);
A a(tup);
我们只要定义以下几个构造函数即可。
struct A
{
//第一个被调用的构造函数,这里生成一个index_squence,并调用第二个构造函数。
template<typename T> A(T t):A(std::make_index_squence< std::tuple_size<T>::value >,t)
{
}
//这里是第二个构造函数,这里将tuple解包,然后调用第三个构造函数
template<size_t ...i,typename T> 
A(std::index_squence<i...>,T t):
A(get<i>(t)...){}
//第三个构造函数,也就是直接用普通参数的构造函数。
A(....){}
}

转载于:https://www.cnblogs.com/abelian/p/6261421.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值