首先我们的第一步当然是将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(....){}
}

tuple解包给类的构造函数的更多相关文章

  1. [转]c++类的构造函数详解

    c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初 ...

  2. 基于RTP的H264视频数据打包解包类

    from:http://blog.csdn.net/dengzikun/article/details/5807694 最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打 ...

  3. c++类的构造函数详解

    c++类的构造函数详解 一. 构造函数是干什么的 class Counter{ public:         // 类Counter的构造函数         // 特点:以类名作为函数名,无返回类 ...

  4. (转)基于RTP的H264视频数据打包解包类

    最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打包.解包的文档和代码.功夫不负有心人,找到不少有价值的文档和代码.参考这些资料,写了H264 RTP打包类.解包类,实现 ...

  5. 07--c++类的构造函数详解

    c++类的构造函数详解 c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特 ...

  6. 【FFMPEG】基于RTP的H264视频数据打包解包类

    最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打包.解包的文档和代码.功夫不负有心人,找到不少有价值的文档和代码.参考这些资料,写了H264 RTP打包类.解包类,实现 ...

  7. Java 学习之反射机制“解刨”分解类,并获取内容!

    正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...

  8. Swift-自定义类的构造函数

    构造函数类似oc中的init方法默认情况下,创建一个,类会调用一个构造函数即使没写任何构造函数,编译器会默认一个构造函数如果是继承NSObject,可以对构造函数重写 class Person: NS ...

  9. Python小技巧:使用*解包和itertools.product()求笛卡尔积

    [问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = ['a', 'b'] list2 = ['c', 'd'] ...

随机推荐

  1. DNS-解析、劫持、污染

    DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工 ...

  2. Linux-获取当前正在执行脚本的绝对路径

    常见的一种误区,是使用 pwd 命 令,该命令的作用是“print name of current/working directory”,这才是此命令的真实含义,当前的工作目录,这里没有任何意思说明, ...

  3. 利用递归生成组合数C(n,m)

    /*===================================== 数的组合问题.从1,2,…,n中取出m个数,将所有组合按照字典顺序列出. 如n=3,m=2时,输出: 1 2 1 3 2 ...

  4. Nancy 简单学习

    1. 环境 vs2010 , nancy 2. 需要测试的功能 1. 输出 页面输出简单文本 2. 输出json 数据 3. 操作 1. 创建asp.net 空项目 2. 添加引用Nancy库 使用n ...

  5. JSP下拉选框,级联选择

    前端: <%@ page contentType="text/html;charset=UTF-8" %> <!DOCTYPE html PUBLIC " ...

  6. Android的界面设计工具 DroidDraw

    Android的界面设计工具 DroidDraw DroidDraw 下载地址:http://code.google.com/p/droiddraw/ 如图 也可以使用在线的版本(http://www ...

  7. Async 和 Await的性能(.NET4.5新异步编程模型)

    异步编程长时间以来一直都是那些技能高超.喜欢挑战自我的开发人员涉足的领域 — 这些人愿意花费时间,充满热情并拥有心理承受能力,能够在非线性的控制流程中不断地琢磨回调,之后再回调. 随着 Microso ...

  8. js判断输入框的范围,并且只能输入数字

    <input type="text" onkeyup="javascript:this.value=this.value.replace(/[^\d]/g,''); ...

  9. HackerRank "Vertical Rooks"

    Please note: VROOK cannot go back-ward - that leads to a simple variation to Game of Nim: just XOR. ...

  10. Python基础教程【读书笔记】 - 2016/6/26

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第一波:第6章  抽象 [总览] 介绍函数.参数parameter.作用于scope概念,以及递归概念. [6.1] 函 ...