boost::swap
पर प्रश्नों का जोड़ा। कृपया नीचे दिए गए कोड का संदर्भ लें जो मूल रूप से boost/swap.hpp
से कट-पेस्ट है। मैं लाइब्रेरी संस्करण 1.43.0 का जिक्र कर रहा हूं।बढ़ावा पर प्रश्न :: स्वैप
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। क्या आप मुझे सी ++ संदर्भ मानक खंड पर इंगित कर सकते हैं जो टेम्पलेट कोड पर गैर-टेम्पलेट की प्राथमिकता के बारे में बात करता है? – Fanatic23
@ फैनैटिक 23: मानक उद्धरण के साथ संपादित उत्तर। – ildjarn
@ildjarn: मुझे डर है कि आपका नोट [विवाद के तहत] है (http://stackoverflow.com/questions/9170247/does-c11-change-the-behavior-of-explicitly-calling-stdswap-to-ensure- ADL-loc)। मैंने सोचा कि यह मामला भी था, लेकिन शायद नहीं। – GManNickG