Chapter 1. Enforcing Design: Constraints, Contracts, and Assertions
本章主要讲的是约束(Constrain)、契约式设计(Design By Contract)和断言(Assertion)。对于每一类都基本上从编译期和运行期两个方面进行说明。
- 编译期约束
- 运行期契约
- 动态断言(运行期)、静态断言(编译期)
编译期约束:
感觉就是在讲如何更进一步对数据类型进行限制,减少错误的发生。文章中主要对几种情况进行了举例:
1)must_have_base()
1)must_have_base()
template<typename Derive,typename Base> struct must_have_base { ~must_have_base() { void (*p)(Derive*,Base *) = constraints; } private: static void constraints(Derive *pd,Base *pb) { pd = pb; } };
这个函数的工作原理就是强制编译器就检查两个对象指针是不是具有继承关系,否则就会编译出错。