;
Date theBirthDate_;
Address theAddress_;
};
std::tr1::shared_ptr
Person::create(const string& name, const Date& birthday, const Address& addr){ return std::tr1::shared_ptr
(new RealPerson(name,birthday,addr)); }
Handle classes和Interface classes解除了接口和实现之间的耦合关系,从而降低文件间的编译依存性。注意一点,两种class的实现方案带来的运行成本也是不容忽视的。如果你应该从你的实际出发,考虑用渐近方式去使用这些技术。
?
?
总结:
1)支持“编译依存性最小化”的一般构想是:相依于声明式,而不要相依于定义式。基于此构想的两个手段是Handle classes和Interface classes。
2)程序库头文件应该以“完全且仅有的声明式”(full and declaration-only forms)的形式存在。这种做法不论是否涉及templates都适用。
?
结语
虽然只有三个条款,但是篇幅比较长,逻辑相对而言也不是特别容易理解,在之后还应该继续多回顾回顾。