简介

  学boost库的时候,遇到一段代码,函数返回类型是boost::tribool 类型。代码里用了boost::tie函数,有点蒙蔽了。查资料总结如下,std也有对应的实现。

基本概念先弄清,std::tuple

  std::tuple元组数据类型,可以把不同类型的元素封装到一个对象里面。可以理解为简单的结构体变量。比如下面的例子,如果使用tuple作为返回值,则一次可返回三个值。

#include <iostream>
#include <tuple>std::tuple<int, double, const char*> foo2(int a, double b,const char* c)
{return std::tuple<int, double, const char*> (a, b, c);
};int main()
{const char* msg = "1.3";auto var = foo2(1,2,msg);
}

和tie有什么关系?

  很简单,就是你把结果包到一个变量传出去了,别人拿到你这个包之后需要拆出来。
在上一步的main函数中添加以下的代码:

int main()
{const char* msg = "1.3";auto var = foo2(1,2,msg);   // 先按照元组的类型定义独立的变量,再调用tie函数把结果拆出来。int a;double b;const char* c;std::tie(a, b, c) = var; //拆包函数,注意被拆的在右边
}

敲黑板、抠细节啦,因为解包是传递值的过程,所以就有了std::ignore,来避免一些成员的解包。如下的代码就a拆出来了。

 int a;std::tie(a, std::ignore, std::ignore) = var;

boost::tie或std::tie是啥相关推荐

  1. c++之 std::tie

    简介 在c++ 11标准库中,加入了std::tie,在c++ 14中改进,方便使用. 其与tuple关系密切, 主要目的是方便地使用tuple. 元组 std::tuple 元组tuple,有人认为 ...

  2. std::tie简单介绍

    参考链接 std::tie详解 std::tie

  3. std::tuple、std::tie(可用于结构体大小比较)、std::pair用法

    1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...

  4. std::tie详解

    std::tie:创建左值引用的 tuple,或将 tuple 解包为独立对象 返回值 含左值引用的 std::tuple 对象. 注意 std::tie 可用于解包 std::pair ,因为 st ...

  5. 从一个小题中的应用来体会下std::tie的便利之处

    文章目录 前言 解题过程 爬楼梯的最少成本 题目分析 DP优化 利用tie进行写法优化 std::tuple std::tuple的访问 std::tie函数中使用std::ignore占位 总结 前 ...

  6. std::tuple, std::pair, std::tie 快速掌握

    tuple是可以存异构元素的容器,比如可以在一个容器中同时存储int.string.bool等. 作为对比,vector只能存储同类型的元素.tuple可做作为struct的一种更简洁高效的替代. 使 ...

  7. std::pair std::tuple std::tie

    std::pair 固定包含两个数据,Defined in header <utility> 场景 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的m ...

  8. std::tie 创建左值引用的 tuple,或将 tuple 解包为独立对象

    说明 std::tie : 创建左值引用的 tuple,或将 tuple 解包为独立对象 可以对std::tuple以及std::pair进行解包 返回值 含左值引用的 std::tuple 对象. ...

  9. boost::hana::ext::std::vector_tag用法的测试程序

    boost::hana::ext::std::vector_tag用法的测试程序 实现功能 C++实现代码 实现功能 boost::hana::ext::std::vector_tag用法的测试程序 ...

最新文章

  1. 重磅!三星宣布3nm成功流片!
  2. Java NIO 系列教程 转
  3. java机试_java机试要点
  4. ScheduledExecutorService
  5. Java开发人员访谈的MindMap
  6. 工作237:vuex取值
  7. 基于Spring Cloud及K8S构建微服务应用
  8. 递归处理汉诺塔问题(c++/python)
  9. Centos之常用命令
  10. 从零搭建自己的SpringBoot后台框架(十三)
  11. 一种基于加权处理的无线传感器网络平均跳距离估计算法(W-DVHop)
  12. 计算机图形学代码之三角形绘制
  13. session超时以及销毁
  14. Java毕设项目银行贷款管理系统计算机(附源码+系统+数据库+LW)
  15. 亚马逊云的服务器(EC2)+阿里云的域名,添加ssl证书
  16. 【flask高级】从源码深入理解flask路由之endpoint
  17. pwd和$PWD的联系与区别
  18. coreldraw怎么画猴子_猴年画猴:CD11绘制小猴头像(1)
  19. Java用for循环打印99乘法表
  20. 【模电—低频学习笔记(一)】信号的频谱

热门文章

  1. Gravatar镜像源自建教程,使用CDN加速无需配置反代
  2. 2010年IT行业从业者掌握哪六种技能将大受欢迎?
  3. IM热门功能讨论:为什么微信里没有消息“已读”功能?
  4. 前端e2e测试使用nightwatch简单示例
  5. springboot 实现机器学习_机器学习入门之SpringBoot学习历程
  6. 快消品营销模式变革:一物一码BC一体化营销
  7. [转]ceph RADOS----概述
  8. “陶渊明后人”讲故事月入百万,借鉴他的玩法,你也可以月入1万
  9. 【NLP】文本分类微调技巧实战2.0
  10. ipd敏捷开发_契合前行,IPD下的敏捷实施