का उपयोग कर-घोषणाusing std::swap
कार्यों आप HasPtr
और Foo
स्वैप करने के लिए घोषणा की है छिपा नहीं है। यह नाम swap
नामित क्षेत्र में std
नामस्थान बनाता है। इसके साथ, std::swap
ओवरलोड रिज़ॉल्यूशन में भाग ले सकते हैं।
सी ++ 11 स्टैंडर्ड से:
7.3.3 घोषणा का उपयोग कर
1 एक का उपयोग कर-घोषणा कथात्मक क्षेत्र में एक नाम का परिचय जो का उपयोग कर-घोषणा में प्रकट होता है।
का उपयोग कर-घोषणा:
using typename
ऑप्टनेस्टेड-नाम-विनिर्देशक अयोग्य-आईडी;
using ::
अयोग्य-आईडी;
सदस्य एक का उपयोग कर-घोषणा में निर्दिष्ट नाम कथात्मक क्षेत्र में घोषित किया जाता है जो का उपयोग कर-घोषणा दिखाई देता हो। [नोट: केवल निर्दिष्ट नाम घोषित किया गया है; में एक गणना नाम निर्दिष्ट करते हुए घोषणा-घोषणामें घोषणाकर्ता के घोषित क्षेत्र का उपयोग करके अपने गणक घोषित नहीं करता है। अंत टिप्पणी] एक का उपयोग कर-घोषणा नाम एक निर्माता (3.4.3.1), यह परोक्ष कंस्ट्रक्टर्स का एक सेट कक्षा में वाणी हैं, जिसमें का उपयोग कर-घोषणा प्रकट होता है (12.9); अन्यथा में निर्दिष्ट नाम-घोषणा किसी अन्य इकाई के नाम के लिए समानार्थी है।
आपके मामले में, तुम हो:
void swap(Foo &lhs, Foo &rhs)
{
using std::swap;
swap(lhs.h, rhs.h);
}
using std::swap;
घोषणा कथात्मक क्षेत्र में std
नाम स्थान है, जो swap(Foo&, Foo&)
समारोह का मुख्य भाग है से नाम swap
परिचय देता है। वैश्विक नामस्थान से swap
नाम फ़ंक्शन के शरीर में अभी भी पहुंच योग्य है।
यदि आपने जो पोस्ट किया है वह फ़ंक्शन की संपूर्णता है, तो आपको using std::swap
घोषणा की आवश्यकता नहीं है। तुम बस के साथ मिल सकता है:
void swap(Foo &lhs, Foo &rhs)
{
swap(lhs.h, rhs.h);
}
swap(HasPtr &lhs, HasPtr &rhs)
के बाद से समारोह से दिख रहा है।
अब, नीचे दिए गए उदाहरण को देखें।
struct Bar {};
void swap(Bar& lhs, Bar& rhs)
{
}
struct Foo
{
int a;
Bar b;
};
void swap(Foo& lhs, Foo& rhs)
{
swap(lhs.a, rhs.a); // A problem
swap(lhs.b, rhs.b);
}
लाइन में चिह्नित A problem
के बाद से वहाँ कोई समारोह swap
नामित कि तर्क के रूप में प्रकार int&
की दो वस्तुओं के साथ काम कर सकते हैं एक समस्या है। आप निम्न विधियों में से एक का उपयोग कर कि ठीक कर सकते हैं:
उपयोग std::swap
स्पष्ट रूप से।
void swap(Foo& lhs, Foo& rhs)
{
std::swap(lhs.a, rhs.a);
swap(lhs.b, rhs.b);
}
समारोह में std::swap
परिचय दें।
void swap(Foo& lhs, Foo& rhs)
{
using std::swap;
swap(lhs.a, rhs.a);
swap(lhs.b, rhs.b);
}
क्योंकि 'उपयोग' का उस –