मेरे पास दो नामस्थान हैं जिनमें प्रत्येक के नाम पर एक ही कार्य है। यदि किसी नामस्थान से मैं उस फ़ंक्शन को कॉल करना चाहता हूं जो सर्वोत्तम से मेल खाता है। नेमस्पेसए में एक फ़ंक्शन से, यदि मैं माईफंक्शन (...) कहता हूं, तो निश्चित रूप से यह नेमस्पेसए में से एक का उपयोग करता है। हालांकि, अगर मैं 'नेमस्पेस बी :: माईफंक्शन' का उपयोग कर जोड़ता हूं, तो मैं उसके द्वारा वर्णित व्यवहार की अपेक्षा करता हूं। हालांकि, मैं वास्तव में जो देखता हूं वह यह है कि यह हमेशा नेमस्पेस फ़ंक्शन पाता है, भले ही मैं नेमस्पेस में हूं। हालांकि, अगर मैं भी एक उपयोग :: नेमस्पेसए जोड़ता हूं (भले ही मैं पहले से ही नेमस्पेस में हूं), यह काम करता है जैसा कि मैं उम्मीद करता हूं। एक प्रदर्शन नीचे है। क्या कोई यह समझा सकता है कि यह कैसे काम करता है?नेमस्पेस खोज ऑर्डर
#include <iostream>
namespace NamespaceA
{
void DoSomething();
void MyFunction(int object);
}
namespace NamespaceB
{
void MyFunction(float object);
}
namespace NamespaceA
{
void DoSomething()
{
using NamespaceA::MyFunction; // Note that without this line the lookup always fins the NamespaceB::MyFunction!
using NamespaceB::MyFunction;
MyFunction(1);
MyFunction(2.0f);
}
void MyFunction(int object)
{
std::cout << "int: " << object << std::endl;
}
}
namespace NamespaceB
{
void MyFunction(float object)
{
std::cout << "float: " << object << std::endl;
}
}
int main(int argc, char *argv[])
{
NamespaceA::DoSomething();
return 0;
}
एक शब्द में, "खराब" । यदि आप 'माईफंक्शन' को अधिभारित करना चाहते हैं, तो बस एक ही नेमस्पेस में दोनों कार्यान्वयन करें, और कंपाइलर की ओवरलोडिंग तंत्र को पता लगाएं कि सबसे अच्छा मिलान कौन सा है। –
क्या आपने इसे दो अलग-अलग कंपाइलरों में करने की कोशिश की है, या यह पता लगाने की कोशिश की है कि मानक व्यवहार क्या होना चाहिए? –
@ डेविड थॉर्नले: यह _is_ मानक व्यवहार। यद्यपि आप सही हैं कि ओपी को क्रॉस-टेस्ट होना चाहिए था। –