C++编程 - tuple、any容器



flyfish 2014-10-29

一 tuple

tuple是固定大小的容器,每一个元素类型能够不同

作用1 替换struct

struct t1
{
int nID;
double dVal;
};

替换为

typedef std::tuple<int,double> t1;

作用2 随意个数的函数返回值

写法1

std::tuple<int,double> TupleFunction1()
{
std::tuple<int,double> tupRet(0,0); tupRet=std::tuple<int,double>(1,2.1); return tupRet;
}

写法2

std::tuple<int,double> TupleFunction2()
{
return std::make_tuple(1,2.1);
}

调用

auto ret=TupleFunction1();
std::cout<<std::get<0>(ret)<<" "<<std::get<1>(ret)<< std::endl;

二 any

any容器採用boost库中的any

boost::any  仅仅存储一个随意类型的元素

boost::any a=1;
boost::any b=2.1;

借助any建造一种能够存储随意类型且大小动态变化的容器

	 std::vector<boost::any> v;
v.push_back(1);
v.push_back(2.1);

输出函数

void OutputAny(boost::any a)
{
if (!a.empty())
{
if(a.type() == typeid(int))
{
std::cout<< boost::any_cast<int>(a)<<std::endl;
}
if(a.type() == typeid(double))
{
std::cout<< boost::any_cast<double>(a)<<std::endl;
} }
}

函数调用

for each(auto e in v)
{
OutputAny(e);
}

以上程序在Visual C++2010下编译通过

C++编程 - tuple、any容器的更多相关文章

  1. Java并发编程:同步容器

    Java并发编程:同步容器 为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch). ...

  2. 【转】Java并发编程:同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...

  3. 8、Java并发编程:同步容器

    Java并发编程:同步容器 为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch). ...

  4. Java并发编程:并发容器ConcurrentHashMap

    Java并发编程:并发容器之ConcurrentHashMap(转载) 下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concu ...

  5. Java并发编程之并发容器

    解决并发情况下的容器线程安全问题的.给多线程环境准备一个线程安全的容器对象. 线程安全的容器对象: Vector, Hashtable.线程安全容器对象,都是使用 synchronized 方法实现的 ...

  6. 《深入实践C++模板编程》之五——容器与迭代器

    1.容器的定义 容器:专门用于某种形式组织及存储数据的类称为“容器”.   2.容器与迭代器 迭代器:封装了对容器虚拟数据序列的操作并按约定提供统一界面以遍历容器内容的代理类即为迭代器.   举例理解 ...

  7. traits编程---萃取容器中迭代器的类型等

    可以直接利用STL中定义好的traits_iterator来萃取 /*特性萃取器*/ template <class unknown_class> struct unknown_class ...

  8. 【转】Java并发编程注意事项

    保证线程安全的三种方法: 不要跨线程访问共享变量 使共享变量是final类型的 将共享变量的操作加上同步 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易. 编写多线程程序, 首先保证它是正 ...

  9. java并发编程实践笔记

    文章转自:http://kenwublog.com/java-concurrency-in-practise-note 1, 保证线程安全的三种方法 :a, 不要跨线程访问共享变量b, 使共享变量是 ...

随机推荐

  1. redis投票计数

    <?php /** * * 缓存利用测试,这里我们获取传过来的投票数据,每次加1,如果增加到了设定值,才将投票 * 次数写回mysql,这大大减轻了与mysql链接的开销,redis的使用由此可 ...

  2. 修改ultisnips的默认键

    把ultisnips修改和textmate一致. <tab>展开代码,再按<tab>跳转到下一个占位符,<shift+tab>跳转上一个占位符. 在vim配置文件中 ...

  3. posix多线程--线程取消

    1.三种取消状态Off                   禁用取消Deferred           推迟取消:在下一个取消点执行取消Asynchronous   异步取消:可以随时执行取消 in ...

  4. android Button背景高度被拉伸问题--解决方案

    接入第三方SDK后,发现SDK提供的弹窗里,有两个按钮的高度呈被拉伸状态. 而,第三方提供的demo内,这两个按钮均呈正常状态. 对于第一次接触Android的菜鸟来说,这个问题颇为难解.第三方在尝试 ...

  5. 安卓测试之ADB命令

    什么是ADB: adb的全称为Android Debug Bridge,就是起到调试桥的作用.借助adb工具,我们可以管理设备或手机模拟器的状态.还可以进行很多手机操作,如安装软件.系统升级.运行sh ...

  6. form的method用get导致中文乱码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. LeetCode: Word Break II 解题报告

    Word Break II Given a string s and a dictionary of words dict, add spaces in s to construct a senten ...

  8. springmvc集成Freemarke配置的几点

    项目结构图 废话不多说, 集成步骤: 1.web.xml  spring-mvc配置 <?xml version="1.0" encoding="UTF-8&quo ...

  9. 第一章: 当前主流的小型嵌入式 GUI

    以下内容转载自安富莱电子论坛:http://forum.armfly.com/forum.php?mod=viewthread&tid=24507&highlight=%B5%B1%C ...

  10. JavaScript高级 面向对象(5)--内存逻辑图画法

    说明(2017.3.30): 1. 使用软件diagram designer,DiagramDesignerSetup1.28.zip,很小只有1M多,我用的自带画图软件.教学视频是“JavaScri ...