本文讨论什么是std::tuple以及其使用方法。
std::tuple
std :: tuple是可以将一至多个类型绑定在一起的类型。创建元组对象时,需要将元素的类型指定为模板参数。我们可以从函数中返回该元组对象,它可以帮助我们从一个函数返回多个值从而避免创建不必要的结构。
-
创建元组示例
声明一个tuple,它是是个int,char,string的集合
tuple<int, char, string>tmp(1, '2', "3"); -
获取元素
从tuple中获取值需要用到std::get函数,以索引值作为模板参数
int i = get<0>(tmp); char c = get<1>(tmp); string s = get<2>(tmp); -
注意事项
- 获取索引大于元组封装的元素数量的任何元素将导致编译时错误。
- 从元组获取元素时使用错误的类型也会导致错误。
- 应该以常量类型作为get的模板参数,否则会导致编译时间错误。
auto a = get<3>(tmp); //超出范围 auto b = get<i>(tmp); //只能用常量 i = get<2>(tmp); //使用错误的类型
进阶:std::make_tuple
注意编译器无法自动推导出tuple类型,例如:
auto tmp{1,'1',"1"}; //编译错误
C++11提供了make_tuple来解决元素个数很多时声明tuple的不便。它通过从参数类型推导出元组中元素的目标类型来创建std :: tuple对象。
auto a = make_tuple(1, '2', "3");
以上的代码中,make_tuple接受三个参数,并自动推导它们的类型为int,char和string。然后,它在内部创建了一个 tuple <int,double,string>对象,并将其初始化并返回。因此,基本上make_tuple有助于自动推导元组类型。
本文深入探讨了C++中的std::tuple,包括如何创建和使用元组对象,利用std::get获取元素,以及std::make_tuple在元素类型自动推导中的作用。元组允许函数返回多个值,提高了代码效率。
1065

被折叠的 条评论
为什么被折叠?



