boost中any库相对variant简单,any可以不限定类型,variant中对我们事先会定义好我们所需的类型,但是any无此限制,any的类型检测是在run time时.

 
boost::any t;
t = 4;
std::cout << boost:: any_cast<int >(t) << std::endl ;
t = std ::string( "hello world!");
std::cout << boost:: any_cast<std ::string>( t) << std ::endl;
 
定义any类型后,既可以赋int类型,也可以赋std::string类型,通过boost的any_cast进行显式转换,这个转换发生在运行期,因此转型可能失败,失败会抛出boost::bad_any_cast异常,如果传入的是any*类型则,可以通过转型后返回指针是否为空判断转型是否成功.
 
bool is_int (const boost::any & operand)
{
    /*利用typeid 进行类型判定 */
    return operand .type() == typeid(int );
}
 
bool is_char_ptr (const boost::any & operand)
{
    /*捕获异常判断转型*/
    try
    {
        boost::any_cast <const char *>(operand );
        return true ;
    }
    catch(const boost:: bad_any_cast &)
    {
        return false ;
    }
}
 
bool is_string (const boost::any & operand)
{
    /*判定返回指针是否为空*/
    return boost ::any_cast< std::string >(&operand);
}
 
 
同样any可以作为容器的元素如下:
std::vector <boost:: any> v ;
v.push_back (4);
v.push_back (std:: string("123456" ));
v.push_back (std:: string("hello world!" ));
std::cout << std:: count_if(v .begin(), v.end (), is_string);
 

boost总结之any的更多相关文章

  1. boost强分类器的实现

    boost.cpp文件下: bool CvCascadeBoost::train( const CvFeatureEvaluator* _featureEvaluator, int _numSampl ...

  2. Boost信号/槽signals2

    信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...

  3. 玩转Windows服务系列——使用Boost.Application快速构建Windows服务

    玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...

  4. boost::function的用法

    本片文章主要介绍boost::function的用法. boost::function 就是一个函数的包装器(function wrapper),用来定义函数对象. 1.  介绍 Boost.Func ...

  5. Boost条件变量condition_variable_any

    Boost条件变量可以用来实现线程同步,它必须与互斥量配合使用.使用条件变量实现生产者消费者的简单例子如下,需要注意的是cond_put.wait(lock)是在等待条件满足.如果条件不满足,则释放锁 ...

  6. 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法

    1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...

  7. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  8. vs2013给项目统一配置boost库

    1.打开项目,然后点击菜单中的 视图->其他窗口->属性管理器 2. 打开属性管理器,点击项目前的箭头,展开项目,找到debug或者release下面的Microsoft.Cpp.Win3 ...

  9. 基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  10. Boost.Python简介

    Boost.Python简单概括:是Boost库的一部分:用来在C++代码中调用python代码以及在Python代码中调用C++代码,并且避免用户直接操作指针. 以下内容搬运自:https://wi ...

随机推荐

  1. 没用调用flush导致的数据保存丢失

    在将字符串保存到文件时,我们采有下面的写法,大部分情况下,都可以直接将数据保存到文件中, using (var fs = System.IO.File.Create(path)) { var sw = ...

  2. HTML5课程大纲/学习路线

    HTML5课程大纲/学习路线 这是什么? 这个一个HTML技术路线的课程大纲/学习大纲. 你能用它做什么? 如果你是找工作的人, 利用本大纲, 你可以学习HTML5语言, 做一个HTML前端工程师, ...

  3. apache开启gzip的方法

    在Apache中开启gzip压缩方法为: 1. 在httpd.conf 或者博客根目录的.htaccess文件中加入如下规则(Apache服务器需要支持 mod_deflate) 本文出处参考:htt ...

  4. PHP初学留神(五)·小结

    来学习快两个月了,这周末即将回家开始写论文.那么走之前,好好总结一下这两个月的所学所得吧.这段时间,在实验室里做的Web开发主要涉及到了web开发的一些框架内容以及php基础知识.思维导图记录如下. ...

  5. ubuntu14.04配置lnmp

    看到了一片讲解ubuntu下安装lnmp的文章,跟着一步步的来,竟然很顺利的成功了,将文章复制如下,原著勿怪 一.操作步骤 1.安装Nginx sudo apt-get install update ...

  6. 《C和指针》读书笔记——第二章 基本概念

    1.编译过程: source code→Compiler→Object code→Linker←Lib ↓ Exe 2.经过初始化的静态变量(static)在程序执行前能获得他们的值. 3.绝大多数环 ...

  7. puppet中anchor的作用

    anchor出现背景:Puppet Forge是一个网上的module仓库,许多人写的puppet module会传上去,供大家下载使用.大家下载了一个module可以直接使用,不应该再来改动里面ma ...

  8. httpcontext in asp.net unit test

    [TestMethod] [HostType("ASP.NET")] [UrlToTest("http://localhost:25153/qq/a.aspx" ...

  9. RPM是RedHat Package Manager(RedHat软件包管理工具)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  10. 如何确定照片是否被PS过

    除了用软件,还可以先右键属性----解除锁定----重新打开属性看详细信息.