首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

boost:swap?该如何解决

2013-01-12 
boost::swap?namespace boost_swap_impl {templateclass Tvoid swap_impl(T& left, T& right){using nam

boost::swap?


 
 namespace boost_swap_impl
 {
   template<class T>
   void swap_impl(T& left, T& right)
   {
     using namespace std;//??? using std::swap;
     swap(left,right);//  为什么不直接用 std::swap()
   }
  } 
 namespace boost
 {
   template<class T1, class T2>
   void swap(T1& left, T2& right)
   {
     ::boost_swap_impl::swap_impl(left, right);//这个类型匹配吗
   }
 }
 
 

[解决办法]
1.

using namespace std;//??? using std::swap;
     swap(left,right);//  为什么不直接用 std::swap()

这里不能直接用std::swap的,用了话,就限制死了,没法调用自定义的swap。因为left,right的类型未知,有可能是2个自定义的类型,这2个类型有自己定义的swap函数。
2.
::boost_swap_impl::swap_impl(left, right);//这个类型匹配吗

不需要匹配,标准库没有的交换,只要有他们自定义的swap,boost::swap就能查找到这个swap函数进行交换。
[解决办法]
 namespace boost_swap_impl
 {
   template<class T>
   void swap_impl(T& left, T& right)
   {
     using namespace std;//??? using std::swap;
     swap(left,right);//  为什么不直接用 std::swap()
//最好不要用using std::swap();因为你一旦这么写了不仅仅是只能调用库里的swap()函数不能调用字节的,而且你还不能使用其他的库函数了,所以最开始来一句using namespace std;以后想用什么库就用什么库
   }
  } 
 namespace boost
 {
   template<class T1, class T2>
   void swap(T1& left, T2& right)
   {
     ::boost_swap_impl::swap_impl(left, right);//这个类型匹配吗
//这里不存在匹配不匹配一说,因为库函数是可以模板可以匹配任何类型的,你在boost_swap_impl名空间下写的函数也是
   }
 }

热点排行