C++ STL和泛型编程(四)----tuple

C++ STL和泛型编程(四)----tuple

一、tuple用例

在这里插入图片描述
元组其主要操作如上所示,其里面可以放置不定量且不同类型的元素数据,底层源码实现如下(利用variadic templates)

二、tuple源码

在这里插入图片描述
首先,其在这里运用的自我继承,且参数层层拆分递减与前面的hash function通用模板的拆分递减参数调用类似,只不过这里是运用在类继承上面。而且这是C++设计模式中的一种。】,每往上继承一层对应的父类传入模板参数就被拆分少1个,一直往上继承,直到继承到base父类此时传入模板参数为空】。

tuple<int, float, string> t(41, 6.3, “nico”);
首先将传入模板参数设置Head=int, Tail…=float, string,然后调用其构造函数,将m_head=41inherited=float 6.3, string “nico”【注意,这里并不是tuple<float, string>(6.3, “nico”)创建临时对象,而是对所继承的父类进行参数指定即相当于 tuple<Head, Tail…>=float, string,则此一层所继承的父类为 tuple<float, string> 且 float m_haed=6.3】。以此类推,逐层往上进行上层的父类参数指定与赋值,如右边所示。

t.tail()的操作:
进入内部操作,返回的首先是t本身【本来指向的是框起来存放(41,6.3,“nico”)这一整块的地址】,然后再经过inherited& 转型,最终 返回的是指向框起来存放(6.3,“nico”)这一整块的地址【相当于转到指向上一层所继承的父类了】
因而 &(t.tail()) 取到的地址是指向框起来存放(6.3,“nico”)这一整块的地址,则 t.tail().head() 取得的便是6.3。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值