के आवृत्ति चर के रूप में मुझे उद्देश्य-सी और सी ++ मिश्रण करने की आवश्यकता है। मैं एक कक्षा के अंदर सभी सी ++ सामान छिपाना चाहता हूं और अन्य सभी को सादा उद्देश्य-सी रखना चाहता हूं। समस्या यह है कि मैं कुछ सी ++ वर्गों को आवृत्ति चर के रूप में रखना चाहता हूं। इसका मतलब है कि उन्हें हेडर फ़ाइल में उल्लेख किया जाना चाहिए, जो अन्य वर्गों द्वारा शामिल हो जाता है और सी ++ पूरे एप्लिकेशन में फैलता है। सबसे अच्छा समाधान मैं अब तक आने में सक्षम था:सी ++ कक्षाएं उद्देश्य-सी कक्षा
#ifdef __cplusplus
#import "cppheader.h"
#endif
@interface Foo : NSObject
{
id regularObjectiveCProperty;
#ifdef __cplusplus
CPPClass cppStuff;
#endif
}
@end
यह काम करता है। कार्यान्वयन फ़ाइल में mm
एक्सटेंशन है, ताकि इसे C++ के साथ मिश्रित उद्देश्य-सी के रूप में संकलित किया जा सके, #ifdef
C++ सामान को अनलॉक करता है और वहां हम जाते हैं। जब कुछ अन्य, पूरी तरह से उद्देश्य-सी वर्ग हेडर आयात करता है, तो सी ++ सामान छिपा हुआ होता है और कक्षा को कुछ खास नहीं दिखता है। यह एक हैक की तरह दिखता है, क्या कोई बेहतर समाधान है?
यह मूल रूप से मैं क्या जब मैं एक ही समस्या थी के साथ आए हैं क्या है:
और अधिक विस्तार और जानकारी के लिए आगे लिंक, एक पॉडकास्ट कि ObjC के बारे में ++ विस्तार से बात करती है सहित के लिए इस सूत्र देखें। लेकिन अपने ifdef पर ध्यान दें: आपको गैर-सीपीपी शाखा के लिए पैडिंग डालना होगा। अन्यथा कंपाइलर आपके फू ऑब्जेक्ट्स के आकार को नहीं जानता। हालांकि यह गैर-नाजुक उदाहरण var builds पर नहीं तोड़ सकता है, यह निश्चित रूप से पुरानी शैली के लक्ष्यों के लिए एक समस्या है। –
मैंने ऊपर उल्लिखित दृष्टिकोण की प्रतिलिपि बनाई है। बहुत अच्छा और आसान माना जाता है, लेकिन फिर यह कुछ पागल स्मृति भ्रष्टाचार की समस्याओं का कारण बनता है: http://stackoverflow.com/questions/2458652/objective-c-insanity-simple-assignement-to-a-single-float-variable-results – morgancodes