设为首页 加入收藏

TOP

Effective C++ Item 45 运用成员函数模板接收所有兼容类型
2015-07-20 18:07:38 】 浏览:2582
Tags:Effective Item 运用 成员 函数 模板 接收 所有 兼容 类型


经验:请使用 member function templates(成员函数模板)生成可接受所有兼容类型的函数

示例:泛化 copy 构造函数
temmplate
  
   
class SmartPtr{
public:
	template
   
     SmartPtr(const SmartPtr
     &other) //member template, 为了生成 copy 构造函数 : heldPtr(other.get()){...} T *get() const {return heldPtr;} //... private: T *heldPtr; //这个 SmartPtr 持有的内置指针 };
   
  

解析:
1.上面代码的意思是,对任何类型 T 和任何类型 U,这里可以根据 SmartPtr 生成一个 SmartPtr
2.未声明为 explicit 是因为原始指针类型之间的转换也是隐式转换的。
3.初始化 this 的 heldPtr 时只有在 U* 可以隐式转换为 T* 才能通过编译


经验:如果你声明 member templates 用于泛化copy构造或泛化assignment操作,你还是需要声明正常的copy 构造函数和 copy assignment 操作符
示例:
template
     
      
class shared_ptr{
public:
	shared_ptr(shared_ptr const &r); //copy 构造函数
	template
      
        //泛化 copy 构造函数 shared_ptr(shared_ptr
       
         const &r); shared_ptr &operator=(shared_ptr const &r); //copy assignment temmplate
        
          //泛化 copy assignment shared_ptr &operator=(shared_ptr
         
           const &r); }; 
         
        
       
      
     

解析:member templates 并不改变语言规则,而语言规则说,如果程序需要一个 copy 构造函数,你却没有声明它,编译器会为你暗自生成一个
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Effective C++ Item 47 请使用 tr.. 下一篇hdu1180诡异的楼梯……bfs走迷宫..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目