"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या C++ एक शून्य पॉइंटर को फ़ंक्शन पॉइंटर में बदल सकता है?

क्या C++ एक शून्य पॉइंटर को फ़ंक्शन पॉइंटर में बदल सकता है?

2024-11-12 को प्रकाशित
ब्राउज़ करें:224

Can C   Convert a Void Pointer to a Function Pointer?

शून्य पॉइंटर्स को फ़ंक्शन पॉइंटर्स में परिवर्तित करना: सी में एक सशर्त संभावना

समस्या

dlsym() के माध्यम से एक शून्य पॉइंटर प्राप्त करना, लक्ष्य है उस सूचक द्वारा संदर्भित फ़ंक्शन को प्रारंभ करें। C-स्टाइल कास्ट के विपरीत, static_cast या reinterpret_cast का उपयोग करके कास्टिंग के माध्यम से रूपांतरण का प्रयास विफल हो गया है। हालाँकि, C 0x सशर्त समर्थन प्रदान करता है, जो कार्यान्वयन को व्यवहार को निर्देशित करने की अनुमति देता है। अधिकांश प्लेटफ़ॉर्म:

void *gptr = dlsym(कुछ प्रतीक..); टाइपडिफ़ शून्य (*fptr)(); fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));

वैकल्पिक रूप से:

fptr my_ptr = 0; reinterpret_cast(my_ptr) = gptr;

जटिल लेकिन पोर्टेबल दृष्टिकोण:
void *gptr = dlsym(some symbol..);
typedef void (*fptr)();
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
यह विधि इस तथ्य का फायदा उठाती है कि फ़ंक्शन पॉइंटर का पता एक ऑब्जेक्ट पॉइंटर है:

fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;
यह दृष्टिकोण मानक में अपरिभाषित है लेकिन अधिकांश कार्यान्वयन पर यथोचित रूप से अच्छा काम करना चाहिए।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3