条款44 Factor parameter-independent code out of templates
将与参数无关的代码抽离template
- Template生成多个classes和多个函数,所以任何template代码都不该与某个造成膨胀的template参数产生相依关系
- 因非类型模板参数而造成的代码膨胀,往往可消除,以函数参数或class成员变量替换template参数
- 因类型参数而造成的代码膨胀,往往可降低,让带有完全相同二进制表述的具现类型共享实现码。
条款45 Use member function templates to accept "all compatible types."
使用成员函数模板接收所有兼容类型
对于smartptr(智能指针),如果以带有base-derived 关系的B,D两类型分别具现化某个template。 产生出来的两个具现体并不带有base-derived关系,所以此时无法进行隐式的类型转换。如果希望他们可以这么做,必须明确写出来。但是继承关系可以随时更新,无穷无尽,所以就有了以下解决办法。
为smartptr写一个模板构造函数,可以根据SmartPtr<U>生成一个SmartPtr<T>
遵循其他智能指针中的get函数返回一个其原始指针
如果你声明 membertemplates 用于"泛化copy构造函数"或"泛化copy assignment操作",你还是需要声明正常的copy构造函数和copy assignment操作符。
条款46 Define non-member functions inside templates when type conversions are desired
需要类型转换时请为模板定义非成员函数
当我们编写一个class template,而它提供之与此template相关的函数支持所有参数之隐式类型转换时,请将那些函数定义为class template内部的friend函数