1.注意一个特殊的行为:如果以带有派生关系的基类B和派生类D两类型分别具现化某个模板类,产生出来的两个具现体并不带有派生关系。
2.如果模板类中需要接受多个兼容类型,可以声明一个成员函数模板。这样的函数往往应该是一个复制构造函数模板(泛化复制构造函数)和一个复制赋值重载函数模板以支持模板对象间的转换。如用户自定义的一个智能指针:
template<typename T>
class SmartPtr{
public:
template<typename U>
SmartPtr(const SmartPtr<U>& other) : heldPtr(other.get()){...} //注意,只有当“存在某个隐式转换可以将一个U*指针转化为T*指针“时才能通过编译
T* get() const { return heldPtr;} //像STL中的智能指针那样支持以成员函数get()返回原始指针
...
private:
T* heldPtr; //原始指针
};
3.如果已经声明了成员函数模板用于”泛化复制构造“或”泛化赋值操作“,还应当声明正常的(非模板函数)复制构造函数和复制赋值操作符,否则编译器会自动声明一个。