c++ - सदस्य स्थैतिक कॉलबैक फ़ंक्शन के लिए extern "C"



callback language-lawyer (1)

बाहरी कॉलबैक एक विशेष श्रेणी से नहीं जुड़ा हुआ है।

इसे अपने क्लास के आंतरिकों के अनुसार एक स्थैतिक वर्ग के सदस्य बनाना अच्छा है, लेकिन यह वास्तविकता को गलत तरीके से प्रदर्शित करता है

इसलिए मैं इसे एक स्वतंत्र extern "C" फ़ंक्शन बनाने की सलाह देता हूं। यह गलतफहमी से बचा जाता है और मान्यताओं को हाइलाइट करता है (उदाहरण के लिए स्वयं को सी माना जाता है लेकिन वास्तविकता कुछ और हो सकती है)। यदि एफ () सार्वजनिक है, यह सब बहुत साफ हो जाएगा। अगर यह निजी होगा, तो आपको अपने कॉलबैक को एक दोस्त बनाने की आवश्यकता होगी और इस तंग युग्मन को फिर से हाइलाइट किया जाएगा।

आवरण विकल्प केवल एक अनावश्यक बिचौलिया को एक ही परिणाम में आने के लिए जोड़ देगा।

मैं हास्केल (जीएचसी) में लिखे गए कोड के लिए एक कॉलबैक फ़ंक्शन प्रदान करना चाहता हूं। यह जीसीसी सी-कंपाइलर जैसी फ़ंक्शन प्रकारों का उपयोग करता है / निर्यात करने के लिए आयात / कार्यक्षमता को निर्यात करता है और मेरे कोड के साथ रनटाइम पर इंटरऑपरेट करता है।

मुझे एक कॉलबैक फ़ंक्शन प्रदान करना होगा, जो वास्तव में this सूचक को कक्षा में स्वीकार करते हैं और अपनी विधि को कॉल करते हैं:

struct C
{
    int f(int i) { ; }
    static int f_callback(void * self, int i)
    {
        static_cast< C * >(self)->f(i);
    }
};

तार्किक रूप से f_callback वर्ग C का एक हिस्सा C , इसलिए मैंने इसे इसी नामस्थान क्षेत्र में रखा।

लेकिन मुझे चिंता है कि मुझे extern "C" भाषा विनिर्देशों का इस्तेमाल करना चाहिए (कॉलिंग सम्मेलन यहां मामला है, नाम नहीं उलझे)? सादा नामस्थान में extern "C" फ़ंक्शन को घोषित और परिभाषित करना संभव है, अलग नाम स्थानों में एक ही नाम के साथ परिभाषित extern "C" फ़ंक्शन के लिए कुछ विशेष नियम हैं, लेकिन वर्ग के दायरे और सरल के नाम स्थान के बीच कोई अंतर नहीं है नाम स्थान एक

क्या यह संभव है कि क्लास स्कोप में static extern "C" फ़ंक्शन को परिभाषित किया जाए?





extern