Boost.Any

原创 2016年09月18日 12:42:00

Examples

#include <list>
#include <boost/any.hpp>

using boost::any_cast;
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
    {
        any_cast<const char *>(operand);
        return true;
    }
    catch(const boost::bad_any_cast &)
    {
        return false;
    }
}

bool is_string(const boost::any & operand)
{
    return 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;
}

Reference

Header <boost/any.hpp>

namespace boost {
  class bad_any_cast;
  class any;
  void swap(any &, any &);
  template<typename T> T any_cast(any &);
  template<typename T> T any_cast(any &&);
  template<typename T> T any_cast(const any &);
  template<typename ValueType> const ValueType * any_cast(const any *);
  template<typename ValueType> ValueType * any_cast(any *);
}

Class any

class any {
public:
  // construct/copy/destruct
  any();
  any(const any &);
  any(any &&);
  template<typename ValueType> any(const ValueType &);
  template<typename ValueType> any(ValueType &&);
  any & operator=(const any &);
  any & operator=(any &&);
  template<typename ValueType> any & operator=(const ValueType &);
  template<typename ValueType> any & operator=(ValueType &&);
  ~any();

  // modifiers
  any & swap(any &);

  // queries
  bool empty() const;
  void clear();
  const std::type_info & type() const;
};



boost.any 了解

boost::any的用法、优点和缺点以及源代码分析  讲解简单的any机理 4.6.1 万能类型boost::any  讲述any的使用...
  • m0_37693059
  • m0_37693059
  • 2017年07月25日 16:56
  • 73

boost.any 容器

我们之前使用的STL容器只能装一种类型的元素 而boost这个容器可以装多种类型 any是一种很特殊的容器,它只能容纳一个元素, 但这个元素可以是任意的类型——int、 double、string, ...
  • u011676589
  • u011676589
  • 2013年08月29日 15:34
  • 1013

Boost.Any 源码解析

Any 解决的问题 当一个 X( 变量/返回值/参数) 需要在运行时态接纳不同类型的参数的时候。 当不同类型(不来自同一个继承体系)的对象需要被视为统一类型的时候。(比如放入同一个容器) 传...
  • cchd0001
  • cchd0001
  • 2016年08月24日 14:38
  • 269

Boost使用指南之Boost.Any

Boost.Any可以代表任何数据类型。 通过使用Boost.Any我们可以让代码变得更加灵活。...
  • u013651556
  • u013651556
  • 2015年04月06日 21:32
  • 209

Linux C++ Boost::any深入理解

/*  * any_test.cpp  *  *  Created on: 2014年5月2日  *      Author: ***  */ #include #include #include ...
  • shuyun123456789
  • shuyun123456789
  • 2014年05月01日 19:16
  • 932

boost.any源码整理和使用说明

Source#include #include  #include "boost/config.hpp"#include #include #include #include  namespace k...
  • laibach0304
  • laibach0304
  • 2007年08月24日 22:44
  • 560

boost.any实现任意类型存储

当你需要一个可变的类型时,有三种可能的解决方案: 无限制的类型,如 void*. 这种方法不可能是类型安全的,应该象逃避灾难一样避免它。可变的类型,即支持多种类型的存储和获取的类型。支持转换的类型,...
  • IT_PCode
  • IT_PCode
  • 2015年01月16日 11:23
  • 1429

boost::any类型实现原理

boost::any是一种通用类型,可以存放任意值。 问题:通用类型any如何存放任意值? A: 这里的通用类型类似于脚本语言中的类型。 方案一, union结构体:但union只能存放固定种类的值,...
  • u012702526
  • u012702526
  • 2014年04月03日 21:20
  • 1350

C++“准”标准库Boost学习指南(6):Boost.Any

Boost.Any Any库支持类型安全地存储和获取任意类型的值。当你需要一个可变的类型时,有三种可能的解决方案: 无限制的类型,如 void*. 这种方法不可能是类型安全的,应该象逃避灾...
  • cbNotes
  • cbNotes
  • 2016年10月19日 14:11
  • 79

在vs2013中引用boost库

关于Boost的盛名我就不多费口舌了,它是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内...
  • qq_31558353
  • qq_31558353
  • 2015年12月18日 09:58
  • 1638
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Boost.Any
举报原因:
原因补充:

(最多只允许输入30个字)