उदाहरण के लिए:मैं सी ++ में विधि सूचक के पते को कैसे मुद्रित करूं?
struct A { void m() { } };
void stream_print() {
void(A::*p)(void) = &A::m;
std::cerr << p << std::endl;
}
void printf_print() {
void(A::*p)(void) = &A::m;
fprintf(stderr, "%p", p);
}
stream_print() फ़ंक्शन हमेशा प्रिंट "1", जो स्पष्ट रूप से नहीं है कि मैं क्या चाहता हूँ। Printf_print संकलित नहीं करता है क्योंकि पी को शून्य * पर नहीं डाला जा सकता है।
मुझे जो चाहिए वह एक विधि सूचक के लिए एक अद्वितीय पहचानकर्ता है जिसे मैं एक कंटेनर में स्टोर कर सकता हूं। मुझे पता है कि यह एक बुरा विचार की तरह लगता है, लेकिन मैं यूनिट परीक्षण के लिए एक छोटा खिलौना विकसित कर रहा हूं जो इससे लाभ उठा सकता है। मैं विधि के अधिभार के बारे में चिंतित नहीं हूं, मुझे पता है कि पॉइंटर को एक विशिष्ट अधिभार में कैसे प्राप्त किया जाए।
मैं सी ++ 0x सक्षम के साथ जी ++ 4.4.3 का उपयोग कर रहा हूं।
यदि आपको कोई संदेह है तो मुझे बताएं।
+1 जब तक कोई कोई दोष न हो ... –
@Maththieu एम .: सबसे पहले, यह सादा गलत है। सी फ़ंक्शन पॉइंटर्स के रूपांतरण को 'शून्य *' में परिभाषित नहीं करता है और, ज़ाहिर है, इसके बारे में कोई गारंटी नहीं है। सी डेटा पॉइंटर्स और फ़ंक्शन पॉइंटर्स के बीच "मिश्रित" रूपांतरण परिभाषित नहीं करता है। आप एक सामान्य फ़ंक्शन पॉइंटर के रूप में 'शून्य (*) (शून्य)' का उपयोग कर सकते हैं, लेकिन 'शून्य * नहीं। – AnT
@ मैथ्यूयू एम .: दूसरा, प्रश्न सदस्य फ़ंक्शन पॉइंटर्स के बारे में है, न कि स्टैंडअलोन फ़ंक्शंस के पॉइंटर्स के बारे में, जो पूरी तरह से एक अलग कहानी है। – AnT