《Effective C++》读书笔记之item45:运用成员函数模板接受所有兼容类型

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.如果已经声明了成员函数模板用于”泛化复制构造“或”泛化赋值操作“,还应当声明正常的(非模板函数)复制构造函数和复制赋值操作符,否则编译器会自动声明一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值