6.5 Any库小结
有差别类型可以包含不同类型的值,它与无差别类型(例如void*)有很大的差别。通常情况下,我们总是严重地依赖于C++中的类型安全,只有在极少数的情况下我们才希望没有类型安全。
这基于下述理由:类型安全可以防止犯错,并且能改善代码的性能。因此,应该避免使用无差别类型。但是,下述情况—— 发现自己需要异构存储、需要将使用者与类型的细节隔离、或者需要在较低的层次获得最大的灵活性—— 也不少见。any为这些功能提供了支持,同时还维持了完全的类型安全,从而使它成为我们的工具箱的极佳补充!
在以下几种情形中使用Any库:
● 需要在容器中存储异构类型的值时
● 需要存储未知类型时
● 传递类型所通过的层次无须了解任何有关该类型的信息时
Any库的设计同时也是一门很有价值的课程,即关于如何封装一个类型而又不影响到包含该类型的类。这种设计可以用于创建泛型函数对象、泛型迭代器等。它是一个展示封装的威力以及多态与模板相结合的例子。
在标准库中,有很多优秀的工具可以用来存放多个元素。当需要存储异构类型的元素时,常常希望避免使用新的集合类型。any类提供了一种解决方法,使得在大多数情况下可以与已有的容器一起使用。从某种程度上来讲,模板类any扩展了标准库容器的功能,它把完全不同的类型包装到一个同构的包装器(wrapper)中,从而这个包装器就可以将它们存储到前述容器中。
把Boost.Any库添加到已有代码中非常简单。它不需要修改设计,并且在应用后就可以立即增加灵活性。该库的接口非常小,因此是一个很容易理解的工具。
Any库由Kevlin Henney创建,与所有的Boost库一样,它由Boost社区修订、改进和强化。






