यदि यह संभव है, तो अपने वर्गों को एक संरचना से प्राप्त करें। इसके बाद आप सी कोड में इस struct की ओर इशारा उपयोग कर सकते हैं:
// C++ code
extern "C" struct Cfoo {};
extern "C" struct Cbar {};
class foo : public Cfoo {};
class bar : public Cbar {};
// C API
extern "C" {
struct Cfoo;
struct Cbar;
}
यह नहीं कड़ाई से एक त्रुटि तथापि जीसीसी कम से कम विभिन्न प्रकार के साथ संकेत के बीच परिवर्तित करने के बारे में चेतावनी दी है है,।
void foo (void) {
struct Cfoo * pf;
struct Cbar * pb;
pf = pb; // gcc warns
}
आप वारिस नहीं कर सकते, तो एक समान विचार का उपयोग लेकिन सी संरचना दुकान सी ++ वस्तु के लिए एक सूचक है, और फिर बस आगे सी एपीआई में संरचनाओं की घोषणा:
// C++ code
class foo {};
class bar {};
extern "C" struct Cfoo { foo * pFoo; };
extern "C" struct Cbar { bar * pBar; };
// C API
extern "C" {
struct Cfoo;
struct Cbar;
}
यहां नुकसान यह है कि सीएफयू और सीबर ऑब्जेक्ट के जीवनकाल की देखभाल की जानी चाहिए।
स्रोत
2009-06-29 17:53:15
क्या मैं पूछ सकता हूं कि लिस्प के साथ इसका क्या संबंध है? – Svante
यह सीएफएफआई (या लिस्पी कार्यान्वयन निर्भर एफएफआई) हालांकि सामान्य लिस्प में सी ++ कक्षाओं को उजागर करने के एक और सामान्य प्रश्न का हिस्सा है। –