分类: C/C++
2013-01-16 12:32:11
当模板类型可以(或者需要能够)相互转换时,使用成员函数模板接受所有的兼容类型。
shared_ptr就写的比较明显,可以是内置类型或其它智能指针,注意shared_ptr的定义 template
成员函数处的模板都是 template
注意第二个成员函数,考构,没有带explicit,可以通过它进行隐式转换。
shared_ptr作为一个模板类,T,Y是不同的具现体,这样的考构成为泛化的考构(generalized)。
template泛化的考构与编译期默认合成的考构(非模板的)不冲突,定义了前者没有后者时,编译期仍会默认合成,同理class shared_ptr { public: template // construct from explicit shared_ptr(Y * p); // any compatible template // built-in pointer, shared_ptr(shared_ptr const& r); // shared_ptr, template // weak_ptr, or explicit shared_ptr(weak_ptr const& r); // auto_ptr template explicit shared_ptr(auto_ptr & r); template // assign from shared_ptr& operator=(shared_ptr const& r); // any compatible template // shared_ptr or shared_ptr& operator=(auto_ptr & r); // auto_ptr ...... }
赋值运算符也是如此。
templateclass shared_ptr { public: shared_ptr(shared_ptr const& r); // copy constructor template // generalized shared_ptr(shared_ptr const& r); // copy constructor shared_ptr& operator=(shared_ptr const& r); // copy assignment template // generalized shared_ptr& operator=(shared_ptr const& r); // copy assignment ... };