#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";
}
}
分享到:
相关推荐
《深入实践Boost:Boost程序库开发的94个...总之,《深入实践Boost:Boost程序库开发的94个秘笈》是 C++ 开发者深入学习 Boost 库的宝贵资源,无论是初学者还是经验丰富的开发者,都能从中受益,提升自己的编程技能。
- **软件设计模式**:Boost库包含如`boost::any`、`boost::scoped_ptr`等设计模式的实现,简化了代码结构。 - **模板元编程**:通过`boost::mpl`,可以在编译时进行复杂的计算,优化代码性能。 - **网络编程**:`...
- **多态与类型安全**:通过`boost::variant`和`boost::any`等工具增强代码的灵活性与安全性。 ##### 3. 高级特性 - **元编程**:探索Boost.MPL和Boost.StaticAssert等元编程工具,实现更高级别的抽象和编译时计算...
3. **泛型指针类any**:研究`boost::any`如何支持不同类型值的存储。 4. **增强的std::pair——TupleTypes**:了解`boost::tuple`如何提供比`std::pair`更强大、更灵活的元组类型。 #### 五、总结 通过本文的学习...
10. **Boost.Any**:允许在运行时存储任意类型的数据,提高了代码的灵活性。 ### 特点与优势 Boost库的诸多特点使其成为C++程序员不可或缺的工具箱: - **高度可移植性**:Boost库支持多种编译器和操作系统,确保...
学习Boost库不仅能够提升编程技能,还能提高代码质量,因为Boost库的组件都是经过严格测试和优化的。在阅读“Boost库入门.chm”文档时,应着重理解每个库的用途,熟悉其基本用法,并通过实践来巩固知识。此外,还...
7. **Boost.Any** 和 **Boost_variant**:存储任意类型数据的容器,增强了代码的灵活性。 通过学习这本书,读者不仅可以掌握C++11和C++14的现代编程技巧,还能深入了解Boost库的应用,提高编程效率,编写出更高效、...
- **泛型指针(any)**:讲解了如何利用Boost.Any来存储不同类型的对象,并讨论了其内部实现机制。 - **TupleTypes**:介绍了一种增强版的`std::pair`类型——`TupleTypes`,以及它如何提供更灵活的数据结构支持。 综...
Boost库是C++社区中一个非常重要的开源项目集合,它提供了一系列经过广泛测试且高质量的库,旨在帮助开发者更好地编写C++程序。Boost库不仅包含了基本的数据结构和算法实现,还涉及到了更高级的主题如泛型编程和模板...
Boost库是一组免费且高质量的C++源代码库集合,旨在补充和完善C++标准库的功能,提供更加灵活、高效且易于使用的工具。Boost不仅帮助开发者解决实际问题,还促进了C++语言的发展,许多Boost库中的特性已经被纳入到...
入门手册通常会介绍Boost的基本概念和安装步骤,让初学者了解如何在项目中引入Boost。这部分可能会讲解如何配置环境,如何编译和链接Boost库,以及如何开始使用一些基础的Boost组件,例如智能指针(shared_ptr、...
Boost库是C++标准化进程中的一个关键力量,提供了许多实用的、经过充分测试的技术,填补了标准库中的一些空缺。 在使用Boost之前,了解其基础架构和特性是很有必要的。首先,Boost库的一个显著特点是其可移植性,这...
"boost_1_37_0 中文学习文档"是针对这个特定版本的Boost库的一份详尽的中文文档,对于初学者来说,是一个极好的学习资源。 Boost库的核心理念是提供可直接纳入C++标准的组件,因此它的设计和实现都遵循了C++的标准...
### Boost库概览 Boost库,作为C++标准库(STL)的有力补充,旨在增强C++语言的功能性与实用性。...无论是初学者还是高级程序员,都能从Boost库中找到适合自己的工具,从而更轻松地完成复杂的编程任务。
《C++中的函数式编程》是一本探讨如何在C++中应用函数式编程范式的书籍。这本书详细介绍了函数式编程的...由于该书内容丰富且具有指导性,它不仅适合初学者入门,也适合有经验的程序员深入了解和掌握C++的高级特性。