初学boost::any的测试代码

#include <iostream>
#include <string>
#include <utility>
#include <vector>
#include "boost/any.hpp"

class A
{
public:
void some_function()
{
std::cout << "A::some_function()\n";
}
};
class B
{
public:
void some_function()
{
std::cout << "B::some_function()\n";
}
};

void print_any(boost::any& a)
{
if (A* pA=boost::any_cast<A>(&a))
{
pA->some_function();
}
else if (B* pB=boost::any_cast<B>(&a))
{
pB->some_function();
}
else
{
try
{
std::cout << boost::any_cast<std::string>(a) << '\n';
}
catch(boost::bad_any_cast&)
{
std::cout << "Oops!\n";
}
}
}

int main()
{
std::cout << "Example of using any.\n\n";
std::vector<boost::any> store_anything;
store_anything.push_back(A());
store_anything.push_back(B());
// 我们再来,再加一些别的东西
store_anything.push_back(std::string("This is fantastic! "));
store_anything.push_back(3);
store_anything.push_back(std::make_pair(true, 7.92));
std::for_each( store_anything.begin(), store_anything.end(), print_any);


std::cout << "Example of using any member functions\n\n";
boost::any a1(100);
boost::any a2(std::string("200"));
boost::any a3;
std::cout << "a3 is ";
if (!a3.empty())
{
std::cout << "not empty\n ";
}
std::cout << "empty\n";
a1.swap(a2);
try
{
std::string s=boost::any_cast<std::string>(a1);
std::cout << "a1 contains a string: " << s << "\n";
}
catch(boost::bad_any_cast& e)
{
std::cout << "I guess a1 doesn't contain a string!\n";
}
if (int* p=boost::any_cast<int>(&a2))
{
std::cout << "a2 seems to have swapped contents with a1: " << *p << "\n";
}
else
{
std::cout << "Nope, no int in a2\n";
}
if (typeid(int)==a2.type())
{
std::cout << "a2's type_info equals the type_info of int\n";
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值