设为首页 加入收藏

TOP

4.5.3 特化std::swap
2013-10-07 15:00:36 来源: 作者: 【 】 浏览:62
Tags:4.5.3 特化 std::swap

4.5.3  特化std::swap

接下来我们示范利用模板特化的方法使用boost::swap。用一个简单的三维空间的点point作为例子,它实现了内部高效的交换函数:

  1. class point  
  2. {  
  3.     int x, y, z;  
  4. public:  
  5.     explicit point(int a=0, int b=0, int c=0):x(a),y(b),z(c){}  
  6.     void print()const  
  7.     {       cout << x <<","<< y <<","<< z << endl;  }  
  8.     void swap(point &p)                         //内置高效交换函数  
  9.     {  
  10.         std::swap(x, p.x);  
  11.         std::swap(y, p.y);  
  12.         std::swap(z, p.z);  
  13.         cout << "inner swap" << endl;  
  14.     }  
  15. };  

特化std::swap()的方法需要向std名字空间添加自定义函数(虽然原则上是不允许变动std名字空间的),代码如下:
  1. namespace std  
  2. {  
  3.     template<> 
  4.     void swap(point &x, point &y)               //模板特化swap函数  
  5.     {x.swap(y);}  
  6. }  
  7. int main()  
  8. {  
  9.     point a(1,2,3), b(4,5,6);  
  10.     cout << "std::swap" << endl;  
  11.     std::swap(a,b);                             //调用std::swap  
  12.     cout << "boost::swap" << endl;  
  13.     boost::swap(a, b);                          //调用boost::swap  
  14. }  

程序运行结果如下:
  1. std::swap  
  2. inner swap  
  3. boost::swap  
  4. inner swap  

由于我们在名字空间特化了std::swap,因此,boost::swap与std::swap的效果相同,都使用了特化后的swap函数。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.4.5 与非标准容器工作 下一篇4.4.3 初始化容器元素

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: