[③C++ Boost]: boost::tuple使用

tuple即元组,它定义了一个有固定数目元素的容器,其中每个元素类型可以不相同,这点它与其他类型的容器不同,例如vector和array(它们所包含的元素类型必须是一样的)。

当一个函数有许多返回值时,为了可读性,一般可以用class或者struct来封装要返回的多个值。boost::tuple提供了另外一种解决函数返回多值得方法,优点是不增加代码量,std::pair其实就是boost::tuple的2个参数的特例,对boost::tuple来说可以绑定更多的参数。

  • 添加头文件:
cpp 复制代码
#include <boost/tuple/tuple.hpp>
  • 构造tuple,构造的参数不必与元素的类型精确相同,只要它们可以隐式地转换就可以了:
cpp 复制代码
boost::tuple<int,double,std::string> my_tuple(42, 3.14, "My first tuple!");
  • make_tuple,生成tuple, 有助于自动推导元组类型,缺省情况下,make_tuple设置元素类型为非const,
    非引用的。为了使一个tuple的元素设为引用类型或者const类型,需要使用boost::ref和boost::cref:
cpp 复制代码
int plain = 42;
boost::make_tuple(plain);

int& ref = plain;
boost::make_tuple(boost::ref(ref));

const int& cref = ref;
boost::make_tuple(boost::cref(cref));
  • 访问tuple元素,t.get()或get(t) ,取得第N个元素值:
cpp 复制代码
#include <iostream>
#include <string>
#include "boost/tuple/tuple.hpp"

int main() {
  boost::tuple<int,double,std::string> my_tuple(42, 3.14, "My first tuple!"); 

  int i = boost::tuples::get<0>(my_tuple);
  double d = my_tuple.get<1>();
  std::string s = boost::get<2>(my_tuple);
}
相关推荐
虾球xz23 分钟前
游戏引擎学习第244天: 完成异步纹理下载
c++·学习·游戏引擎
BOB-wangbaohai24 分钟前
Flowable7.x学习笔记(十四)查看部署流程Bpmn2.0-xml
xml·笔记·学习
矛取矛求31 分钟前
C++区别于C语言的提升用法(万字总结)
c语言·c++
ephemerals__37 分钟前
【c++11】c++11新特性(下)(可变参数模板、default和delete、容器新设定、包装器)
开发语言·c++
先生沉默先1 小时前
c#接口_抽象类_多态学习
开发语言·学习·c#
豆芽8191 小时前
图解YOLO(You Only Look Once)目标检测(v1-v5)
人工智能·深度学习·学习·yolo·目标检测·计算机视觉
友善啊,朋友1 小时前
《普通逻辑》学习记录——性质命题及其推理
学习·逻辑学
egoist20231 小时前
【C++指南】告别C字符串陷阱:如何实现封装string?
开发语言·数据结构·c++·c++11·string·auto·深/浅拷贝
Zfox_1 小时前
【Qt】文件
c++·qt·qt5·客户端开发
PLUS_WAVE2 小时前
【CUDA 编译 bug】ld: cannot find -lcudart
服务器·c++·bug·环境·编译·cuda·ld