13
幾個關於boost::swap
的問題。請參考下面的代碼,該代碼基本上是從boost/swap.hpp
的剪貼。我指的是庫版本1.43.0。關於boost :: swap的問題
namespace boost_swap_impl
{
template<class T>
void swap_impl(T& left, T& right)
{
using namespace std;//use std::swap if argument dependent lookup fails
swap(left,right);
}
template<class T, std::size_t N>
void swap_impl(T (& left)[N], T (& right)[N])
{
for (std::size_t i = 0; i < N; ++i)
{
::boost_swap_impl::swap_impl(left[i], right[i]);
}
}
}
namespace boost
{
template<class T1, class T2>
void swap(T1& left, T2& right)
{
::boost_swap_impl::swap_impl(left, right);
}
}
- 爲什麼聲明
boost::swap
爲template <typename T1, typename T2>
當它是所有處理同一類型的代碼的其他人呢? - 如果我定義了我自己的全局函數
void swap(T&, T&)
我看到它是從swap_impl(T& left, T& right)
調用的全局函數。這是不是衝突,因此是錯誤條件,因爲swap_impl
也使用namespace std
它已定義的交換?
@jam:+1。你能否指點我的C++參考標準部分,討論非模板優先於模板代碼? – Fanatic23 2011-05-24 18:49:34
@ Fanatic23:用標準引文編輯的答案。 – ildjarn 2011-05-24 19:05:33
@ildjarn:恐怕你的筆記[爭論](http://stackoverflow.com/questions/9170247/does-c11-change-the-behavior-of-explicitly-calling-stdswap-to-ensure- ADL-LOC)。我認爲也是這樣,但也許不是。 – GManNickG 2012-02-07 02:33:48