Utility 库如何改进你的程序?
编译期断言
BOOST_STATIC_ASSERT
安全的析构
checked_delete
和checked_array_delete
禁止复制
noncopyable
operator&
被重载时用addressof
取得对象地址用
enable_if
和disable_if
控制重载与特化
有些工具还不够组成它们自己的库,因此它们与其它实体被集合到一起。这就形成了 Boost.Utility,收集了一些没有更合适地方存放的、有用的工具。它们很有用,应该被加入到Boost,但它们又太小,不足以形成自己的库。本 章介绍Boost.Utility中最基本的以及最广泛使用的工具。
我们将从 BOOST_STATIC_ASSERT
开始,它是一个在编译期判断整型常量表达式的工具。然后,我们看看当你通过一个指向不完整类型的指针delete
对象时,即当被删除的对象的内存布局未知时,会发生什么。checked_delete
使得这个讨论更为有趣。我们还会看到 noncopyable
如何防止一个类被复制,这也是本章最重要的主题。然后我们将看到 addressof
, 它用于阻止那些重载了operator&
的险恶的程序员[1]的病态行为。最后,我们将测试 enable_if
, 它非常有用,可用于在名字查找时控制函数重载与模板特化是否被考虑。
[1] 如果你认为我说的不对,请把你认为最合理的重载了
operator&
的用例发给我。