• 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);
     
  • 相关阅读:
    Dos.ORM logo.Net轻量级开源ORM框架 Dos.ORM
    C# FUNC 应用
    WCF教程网址
    C#扩展方法实现 byte[] 输出为HEX字符串形式
    apache配置,禁止指定后缀访问
    IServerChannelSinkProvider
    在服务器端的远程对象中加上抽象工厂的接口和实现类
    pannel加载窗体
    权限框架
    工作周记
  • 原文地址:https://www.cnblogs.com/ourroad/p/3362174.html
Copyright © 2020-2023  润新知