zoukankan      html  css  js  c++  java
  • Boost.Any

    支持类型安全地存储和获取任意类型的值

    #include <list>
    #include <boost/any.hpp>
    #include <string>
    #include <iostream>
    
    typedef std::list<boost::any> many;
    
    void append_int(many & values, int value)
    {
      boost::any to_append = value;
      values.push_back(to_append);
    }
    
    void append_string(many & values, const std::string & value)
    {
      values.push_back(value);
    }
    
    void append_char_ptr(many & values, const char * value)
    {
      values.push_back(value);
    }
    
    void append_any(many & values, const boost::any & value)
    {
      values.push_back(value);
    }
    
    void append_nothing(many & values)
    {
      values.push_back(boost::any());
    }
    
    
    bool is_empty(const boost::any & operand)
    {
      return operand.empty();
    }
    
    bool is_int(const boost::any & operand)
    {
      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);
    }
    
    void count_all(many & values, std::ostream & out)
    {
      out << "#empty == "
        << std::count_if(values.begin(), values.end(), is_empty) << std::endl;
      out << "#int == "
        << std::count_if(values.begin(), values.end(), is_int) << std::endl;
      out << "#const char * == "
        << std::count_if(values.begin(), values.end(), is_char_ptr) << std::endl;
      out << "#string == "
        << std::count_if(values.begin(), values.end(), is_string) << std::endl;
    }
    
    int main()
    {
      many values;
    
      append_int(values, 3);
      append_any(values, 4);
      append_char_ptr(values, "abc");
      append_string(values, std::string("abc"));
      append_int(values, 5);
      std::string str = "def";
      append_string(values, str);
      append_any(values, str);
      append_nothing(values);
    
      count_all(values, std::cout);
      return 0;
    }

     

  • 相关阅读:
    svn 更新
    首尾渐变
    sublime常用快捷键
    【CSS3】transition过渡和animation动画
    JS实现奇偶数的判断
    style、currentStyle、getComputedStyle区别介绍
    JavaScript中判断对象类型的种种方法
    CSS3 animation动画,循环间的延时执行时间
    EMCA创建em资料库时报错
    OS Kernel Parameter.semopm
  • 原文地址:https://www.cnblogs.com/chenkkkabc/p/3200395.html
Copyright © 2011-2022 走看看