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名空间下写的函数也是
}
}