zoukankan      html  css  js  c++  java
  • boost总结之any

    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);
     
  • 相关阅读:
    mysql基础命令(一)
    vue组件之间的通信
    wepy的使用
    mockjs中的方法(三)
    每周散记 20181022
    api资源
    三七
    画中画 视频合成
    每周散记 20180910
    linux文件权限多一个+啥意思
  • 原文地址:https://www.cnblogs.com/ourroad/p/3362174.html
Copyright © 2011-2022 走看看