इस कोड पर विचार करें:एक इनलाइन नेमस्पेस मौजूद होने पर मैं स्पष्ट रूप से एक संलग्न नामस्थान का संदर्भ कैसे दे सकता हूं?
#include <iostream>
namespace Foo{
void ool() // Version A
{
std::cout << "Foo::ool" << std::endl;
}
inline namespace Bar{
void ool() // Version B
{
std::cout << "Foo::Bar::ool" << std::endl;
}
}
}
int main()
{
Foo::ool(); // <- error
}
दोनों बजना और जी ++ सही ढंग से Foo::ool
के रूप में अस्पष्ट निशान। मैं समस्या के बिना Foo::Bar::ool
पर कॉल कर सकता हूं लेकिन क्या संस्करण घोषणा को बिना किसी घोषणा के कॉल करने का कोई तरीका है?
मैंने लोगों को यह समझने की कोशिश कर रहे समान स्थिति में पाया लेकिन मुझे इस मामले का समाधान नहीं मिला।
मैं इस स्थिति में हूं क्योंकि मेरे पास एक परियोजना है जिसमें std::__1::pair
और std::pair
की घोषणा शामिल है, जो विभिन्न स्थानों पर बनाई गई है, std::__1
इनलाइन नेमस्पेस होने के साथ। मुझे स्पष्ट रूप से std::pair
पर इंगित करने के लिए कोड की आवश्यकता है। क्या इसके लिए कोई समाधान है?
शायद __1 :: जोड़ी को प्रस्तुत करने से पहले एक उपनाम टेम्पलेट को परिभाषित करता है जो std :: pair को संदर्भित करता है? – Columbo
क्या आप वाकई [इस समस्या] को देख रहे हैं (http://stackoverflow.com/questions/9000816/libc-stop-std-renaming-to-std-1)? (मूल रूप से, समाधान संकलन विकल्पों में '-std = C++ 0x' (या नए कंपाइलर्स के समान) जोड़ना होगा।) आप किस कंपाइलर संस्करण और सेटिंग्स का उपयोग कर रहे हैं? – utnapistim
utnapistim: आप सही हैं। मुझे अपने विशिष्ट मामले के लिए इस कामकाज का सामना करना पड़ा था, लेकिन मुझे सामान्य मामले में इस विशिष्ट अस्पष्टता को हल करने के बारे में उत्सुकता मिली। मुझे लगता है कि समाधान मेरे मामले में std = libstdC++ में अधिक झूठ बोला लेकिन यह मेरे संकलन मुद्दों को हल किया, धन्यवाद! – YvesQuemener