开门见山, tuple 本身就是一种结构体,但是是一个模板类 我们先按照原始的思维去思考,假设 tuple 就是一个普通的结构体我们会面临 怎么样的场景? 假设我现在需要 tuple 来存一个 std::string我们这样写: struct tuple { std::string string_; }; 然后我们又需要 tuple 来存一个 int和double我们又需要: ...
std::tuple<int, double, std::string> myTuple(42, 3.14, "hello"); int myInt = std::get<0>(myTuple); double myDouble = std::get<1>(myTuple); std::string myString = std::get<2>(myTuple); 实现原理 std::tuple 的实现通常基于递归模板和变长模板参数。 首先定义包村每个元素实际值的...
std::tuple的实现原理 在讲述实现原理前,我们先看一下tuple可以用来做什么。 // tuple example#include<iostream>#include<tuple>intmain(){std::tuple<int,char>foo(10,'x');autobar=std::make_tuple("test",3.1,14,'y');std::get<2>(bar)=100;// access elementstd::get<0>(foo)...
std::tuple的实现基于递归,构造过程遵循入栈顺序,构造顺序从最后一个元素到第一个元素。关键在于std::_Tuple_impl类,它继承自std::_Tuple_impl以完成核心功能。分析了std::_Tuple_impl的构造过程,以及如何通过递归实现。接着,深入分析了std::_Head_base类,解释了如何优化其设计以利用编译器优化...
但是,当问你 std::tuple 的底层实现,你可能一时半会儿想不出它底层是基于何种数据结构,或者什么原理实现。 实际上,std::tuple是基于递归实现,在递归中完成std::tuple对象的构造。比如,在上面demo中,std::tuple对象t的构造过程递如下: 第一层递归。准备存储t的第一个元素1,剩下的是 std:tuple<std::string,...
std::tuple < short, int, double > (继续“递归”继承) ②.std::tuple < int, double > ③.std::tuple < double > ④.std::tuple <> 三、内存结构 值得一提的是,正因为基于上述继承关系,在tuple对象的内存结构中,变量的存放顺序(变量在对象内存中的地址高低)与实际声明的先后顺序相反,内存中的变量...