boost swap实现

先简单贴下boost swap实现的代码:


namespace boost_swap_impl
{
    void swap_impl(T& left, T& right)
    {
          using namespace std; // 如果能够通过adl找到,就用adl找到的,也就是下面说的第一种覆写swap的方式;否则使用std的swap
          swap(left, right);
   }
}

namesapce boost
{
      void swap(T& left, T& right)
      {
           ::boost_swap_impl::swap_impl(left, right);
       }
}

这种实现的精巧之处在于,你可以通过2种方式覆写swap,提供针对自己特定类的swap函数。

例如:

class A

    public:

     void Swap(A& a, A& b) {...}

};

1. 可以通过编写全局函数   void swap(A& a, A& b) { a.Swap(b);}

2. 可以编写std 的特化swap

namespace std

{

   template<>

   void swap(A& a, A& b)

   {

       a.Swap(b);

  }


一个简简单单的swap,boost的实现也是考虑的够全面的了

你可能感兴趣的:(boost swap实现)