运用成员函数模板接收所有参数类型
这里我们主要以智能指针模板为例来讲解,原始指针之间存在这样派生类像基类的转换,也就是一种隐式转换关系:类似下面这种情况:
class Base {}
class Derived: public Base{}
Base *pB=new Derived;
我们也希望智能指针支持类似这样的操作,以使其支持运行期多态。那么可以通过成员函数模板来解决这个问题:
template<class T>
class SmartPtr
{
public:
SmartPtr(const SmartPtr &);//声明自己的拷贝构造函数
template<class Y>
SmartPtr(const SmartPtr<Y>&);
template <class Y>
SmartPtr& operator=(const SmartPtr<Y>&);
SmartPtr& operator=(const SmartPtr&)//声明自己的拷贝赋值函数
private:
T *ptr;
}
这里主要涉及的两个点:
1.使用成员函数模板来生成可接受所有兼容类型的函数。
2.如果声明了成员函数模板用于泛化copy构造函数,或泛化拷贝赋值函数,请注意声明正常的copy函数和拷贝赋值函数