बिल्कुल हासिल करने का कोई तरीका नहीं है। असल में, सदस्य फ़ंक्शंस यहां कोई फर्क नहीं पड़ता: एक साधारण फ़ंक्शन घोषित करने का कोई तरीका नहीं है जो पॉइंटर को अपने फ़ंक्शन प्रकार पर लौटाता है। घोषणा असीम रूप से रिकर्सिव होगी।
सामान्य कार्य के मामले में आप void (*)()
प्रकार को "सार्वभौमिक" फ़ंक्शन पॉइंटर प्रकार के रूप में उपयोग कर सकते हैं (जैसे void *
अक्सर डेटा प्रकारों के लिए उपयोग किया जाता है)। सदस्य फ़ंक्शन पॉइंटर्स के लिए जो void (A::*)()
प्रकार होगा। यद्यपि आपको उस उद्देश्य के लिए reinterpret_cast
का उपयोग करना होगा। हालांकि, यह उपयोग (एक राउंड-ट्रिप रूपांतरण) तब होता है जब reinterpret_cast
का व्यवहार परिभाषित किया जाता है।
बेशक, आपको पॉइंटर को उस प्रकार से बदलने के लिए कास्ट का उपयोग करने के लिए मजबूर होना होगा। AFAIK, एक इंटरमीडिएट अस्थायी टेम्पलेट ऑब्जेक्ट के साथ सुरुचिपूर्ण टेम्पलेट-आधारित समाधान हैं जो कास्टिंग करते हैं।
आप इस GotW entry पर भी एक नज़र डालना चाहते हैं।
पीएस नोट, कि void *
फ़ंक्शन पॉइंटर्स के लिए मध्यवर्ती प्रकार के रूप में टाइप करना भाषा द्वारा प्रतिबंधित है। हालांकि इस तरह के अवैध उपयोग सामान्य फ़ंक्शन पॉइंटर्स के साथ "काम करने" लगते हैं, लेकिन सदस्य फ़ंक्शन पॉइंटर्स के साथ काम करने का बिल्कुल कोई मौका नहीं है। सदस्य फ़ंक्शन पॉइंटर्स आम तौर पर void *
पॉइंटर के आकार से अधिक आकार वाले गैर-तुच्छ वस्तुओं होते हैं।
मैं कहना उपयोग 'mem_fun_ref' अच्छा लगेगा, लेकिन मैं कैसे नहीं देख सकता। अच्छा प्रश्न। – wheaties
फिर से नहीं ... हर कोई ऐसा क्यों करना चाहता है? मुझे इसके करीब भी कुछ भी चाहिए नहीं है। –
@ डेविड: मैं उस पर तुम्हारे साथ हूं। मुझे सी ++ में प्रोग्रामिंग के 15 वर्षों में सदस्य पॉइंटर्स _once_ का उपयोग करना याद है। – sbi