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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

banguijun

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值