दिलचस्प पोस्ट
जावास्क्रिप्ट में सॉर्ट करना: क्या प्रत्येक फंक्शन में "रिटर्न 0" कथन है? समाप्त करने के लिए "किसी भी प्रक्रिया" के लिए प्रतीक्षा करें HTML ईमेल में छवि को एम्बेड करना LazyList क्या है? कैसे iPhone / iPad डिवाइस पर कुल उपलब्ध / मुक्त डिस्क स्थान का पता लगाने के लिए? पायथन में एसएफटीपी? (स्वतंत्र मंच) रेज़र-आधारित दृश्य संदर्भित विधानसभाएं नहीं देखता है "जहां 1 = 1" स्टेटमेंट उपयोगकर्ता जनरेट किए गए HTML के अंदर जावास्क्रिप्ट इंजेक्शन हमलों को कैसे रोकें एएसपी.नेट एमवीसी में टेम्पाडाटा का उपयोग करना – सर्वश्रेष्ठ अभ्यास jQuery $। एजेक्स (), $। फास्ट Firefox में "विकल्प" REQUEST_METHOD भेज रहा है नए संदर्भ वर्गों का क्या महत्व है? रेल मॉडल में केस-असंवेदनशील खोज पायथन 3 में execfile के लिए एक विकल्प क्या है? एक सॉकेट सर्वर के रूप में कार्य करने के लिए यूनिटी 3 डी सी # प्लगइन

उद्देश्य सी के बजाय कोको के साथ सी ++ का उपयोग करें?

मैं उन अनुप्रयोगों को लिखना चाहूंगा जो सी ++ और कोको फ़्रेमवर्क का उपयोग करते हैं क्योंकि ऐप्पल कार्बन 64-बिट सक्षम नहीं कर रहा है। सी ++ लिनक्स और विंडोज पर इसके कार्यान्वयन में बहुत वैनिला लगता है लेकिन मैक ओएस एक्स पर यह लगता है कि अतिरिक्त ऐप्पल के विशिष्ट टुकड़े आवश्यक हैं (जैसे ओबजे-सी आवरण)। ऐसा लगता है कि एप्पल डेवलपर्स को सी ++ की बजाय उद्देश्य-सी में लिखने के लिए मजबूर कर रहा है, हालांकि मैं गलत हो सकता है।

मै मैक पर कोड लिखने के लिए एक रास्ता खोजने की कोशिश कर रहा हूं जो कि क्रॉस प्लेटफॉर्म को रखना आसान होगा। लिनक्स / विंडोज के लिए सी + + में कोड लिखने के बाद और फिर उद्देश्य-सी में बड़े भाग को फिर से लिखना बहुत ही अक्षम होगा।

क्या सी + + में कोड लिखने का एक तरीका है जो भविष्य के लिए समर्थित होगा और Xcode में समर्थित है? इसके अलावा, यदि यह संभव है, तो मैं सी ++ और उद्देश्य- सी को Xcode में किस प्रकार मिलाया? धन्यवाद।

वेब के समाधान से एकत्रित समाधान "उद्देश्य सी के बजाय कोको के साथ सी ++ का उपयोग करें?"

आप पूरी तरह से C ++ में एक कोको एप्लिकेशन नहीं लिख सकते कोको को कुंजी-मान बाइंडिंग, प्रतिनिधि (कोको स्टाइल) और लक्ष्य-एक्शन पैटर्न जैसे कई मुख्य प्रौद्योगिकियों के लिए उद्देश्य-सी की देर से बाध्यकारी क्षमताओं पर निर्भर करता है। देर से बाध्यकारी आवश्यकताएं को कोको एपीआई को एक संकलन-समयबद्ध, टाइप की गई भाषा जैसे सी ++ ⁱ में लागू करना बहुत मुश्किल है। आप निश्चित रूप से, एक शुद्ध सी + + ऐप लिख सकते हैं जो ओएस एक्स पर चलता है। यह सिर्फ कोका एपीआई का उपयोग नहीं कर सकता है।

इसलिए, आपके पास दो विकल्प हैं यदि आप सी + + ऐप्स के बीच अन्य प्लेटफॉर्म और आपके कोको-आधारित एप्लिकेशन के बीच कोड साझा करना चाहते हैं। सबसे पहले सी ++ में मॉडल परत और कोको में जीयूआई लिखना है। मैथमैटिका सहित कुछ बहुत बड़े ऐप्स द्वारा उपयोग किया जाने वाला यह एक सामान्य तरीका है आपका C ++ कोड अपरिवर्तित नहीं छोड़ा जा सकता है (ओएस एक्स पर सी + + लिखने या संकलन करने के लिए आपको "फ़िशंगी" सेब एक्सटेंशन की आवश्यकता नहीं है)। आपका नियंत्रक परत संभवत: उद्देश्य- C ++ का उपयोग करेगा (संभवत: "फ़िक़्का" ऐप्पल एक्सटेंशन जिसे आप कहते हैं)। उद्देश्य- C ++ सी ++ का एक सुपरसेट है, जैसे उद्देश्य-सी सी-सी का एक सुपरसेट है, उद्देश्य-सी ++ में, आप objc-style संदेश को कॉल कर सकते हैं (जैसे [some-objc-object callMethod]; ) C ++ के भीतर से समारोह। इसके विपरीत, आप ObjC कोड के अंदर से C ++ फ़ंक्शन को कॉल कर सकते हैं जैसे:

 @interface MyClass { MyCPPClass *cppInstance; } @end @implementation MyClass - (id)init { if(self = [super init]) { cppInstance = new MyCPPClass(); } return self; } - (void) dealloc { if(cppInstance != NULL) delete cppInstance; [super dealloc]; } - (void)callCpp { cppInstance->SomeMethod(); } @end 

आप उद्देश्य-सी भाषा गाइड में उद्देश्य-सी ++ के बारे में अधिक जानकारी प्राप्त कर सकते हैं। दृश्य परत तो शुद्ध उद्देश्य-सी हो सकता है

दूसरा विकल्प एक क्रॉस-प्लेटफॉर्म सी ++ टूलकिट का उपयोग करना है। Qt टूलकिट बिल फिट हो सकता है क्रॉस-प्लेटफॉर्म टूलकिट को आम तौर पर मैक उपयोगकर्ताओं द्वारा घृणा कर दिया जाता है क्योंकि उन्हें सभी नज़र नहीं मिलते हैं और विवरण बिल्कुल सही लगता है और मैक उपयोगकर्ताओं को मैक एप्लीकेशंस के यूआई में पॉलिश की उम्मीद होती है। क्यूटी एक आश्चर्यजनक अच्छी नौकरी करता है, और दर्शकों और आपके ऐप के उपयोग के आधार पर, यह काफी अच्छा हो सकता है। इसके अलावा, आप ओएस एक्स-विशिष्ट तकनीकों जैसे कोर एनीमेशन और कुछ क्विकटाइम कार्यक्षमता में से कुछ खो देंगे, हालांकि क्यूटी एपीआई में लगभग प्रतिस्थापन हैं जैसा कि आप बताते हैं, कार्बन को 64-बिट पर पोर्ट नहीं किया जाएगा चूंकि क्यूटी कार्बन एपीआई पर लागू किया गया है, ट्रोलटेक / नोकिया को कोटेएपी एपीआई में पोर्ट क्यूटी करना पड़ा है ताकि इसे 64-बिट संगत बनाने के लिए किया जा सके। मेरी समझ यह है कि Qt के अगले रिलेश (वर्तमान में रिलीज़ कैंडिडेट में ) इस संक्रमण को पूरा करता है और ओएस एक्स पर 64-बिट संगत है। आप क्यूटी 4.5 के स्रोत पर नजर रखना चाहते हैं यदि आप सी ++ को एकीकृत करने में रुचि रखते हैं और कोको एपीआई


A कुछ समय के लिए एप्पल ने कोका एपीआई को जावा पर उपलब्ध कराया, लेकिन पुल को व्यापक हाथ ट्यूनिंग की आवश्यकता थी और अधिक उन्नत तकनीकों जैसे कि ऊपर वर्णित कुंजी-मान बाइंडिंग्स को संभालने में असमर्थ थे। वर्तमान में गतिशील रूप से टाइप किए गए, रनटाइम-बाउंड जैसे पायथन, रूबी, आदि उद्देश्य-सी के बिना एक कोको ऐप लिखने का एकमात्र वास्तविक विकल्प हैं (हालांकि इन पुलों को उद्देश्य-सी हुड के तहत उपयोग किया जाता है)।

खैर, यह मूर्खतापूर्ण लग सकता है, लेकिन वास्तव में हम मैक ओएस एक्स के लिए जीयूआई बनाने के लिए शुद्ध सी ++ कोड लिख सकते हैं, लेकिन हमें कोका फ्रेमवर्क के खिलाफ लिंक करना होगा

 /* * test1.cpp * This program shows how to access Cocoa GUI from pure C/C++ * and build a truly functional GUI application (although very simple). * * Compile using: * g++ -framework Cocoa -o test1 test1.cpp * * that will output 'test1' binary. */ #include <CoreFoundation/CoreFoundation.h> #include <objc/objc.h> #include <objc/objc-runtime.h> #include <iostream> extern "C" int NSRunAlertPanel(CFStringRef strTitle, CFStringRef strMsg, CFStringRef strButton1, CFStringRef strButton2, CFStringRef strButton3, ...); int main(int argc, char** argv) { id app = NULL; id pool = (id)objc_getClass("NSAutoreleasePool"); if (!pool) { std::cerr << "Unable to get NSAutoreleasePool!\nAborting\n"; return -1; } pool = objc_msgSend(pool, sel_registerName("alloc")); if (!pool) { std::cerr << "Unable to create NSAutoreleasePool...\nAborting...\n"; return -1; } pool = objc_msgSend(pool, sel_registerName("init")); app = objc_msgSend((id)objc_getClass("NSApplication"), sel_registerName("sharedApplication")); NSRunAlertPanel(CFSTR("Testing"), CFSTR("This is a simple test to display NSAlertPanel."), CFSTR("OK"), NULL, NULL); objc_msgSend(pool, sel_registerName("release")); return 0; } 

हां, आप बस सी ++ का उपयोग कर सकते हैं (यानी यह *। सीपीपी फाइलों में लिखना) और यहां तक ​​कि सी ++ और उद्देश्य-सी का मिश्रण * .एमएम फाइलों में (मानक उद्देश्य- सी कोड * .m फाइलों में संग्रहित है)।

बेशक, आपको अभी भी अपने यूजर इंटरफेस के लिए उद्देश्य-सी का उपयोग करना होगा और अपने सी ++ ऑब्जेक्ट के लिए ऑब्जेक्टिव-सी रैपर बनाना होगा। एक अन्य विकल्प क्यूटी पर स्विच करना है जो एक सी ++ फ्रेमवर्क है जो विंडोज, मैक ओएस एक्स और लिनक्स का समर्थन करता है – और अगले संस्करण 4.5 के साथ एलजीपीएल के तहत जारी किया जाएगा।

हाँ, आप उन्हें मिश्रण कर सकते हैं

आपको अपने जीयूआई ऑब्जेक्ट पर सीधे काम करने और उनसे सूचनाएं प्राप्त करने के लिए उद्देश्य-सी का उपयोग करना होगा।

ये उद्देश्य-सी ऑब्जेक्ट सीधे सी ++ तर्क को कॉल कर सकते हैं यदि आप उन्हें शुद्ध उद्देश्य-सी। एम फाइलों के बजाय। ध्यान दें कि आपको ऊपरी अक्षर का उपयोग करने की सलाह दे रही बड़ी सलाह मिल सकती है I। उद्देश्य-सी ++ को इंगित करने के लिए, लेकिन यह बहुत असमान है और आपको और साथ ही संकलक को भ्रमित करने की संभावना है।

आपको प्रत्येक C ++ ऑब्जेक्ट को लपेटने की आवश्यकता नहीं है, लेकिन आपके उद्देश्य- C कोड को उन पर पॉइंटर्स शामिल करने की आवश्यकता होगी।

ऐप्पल कार्बन या सीपीपी के साथ एक पूर्ण नमूना कोको है। रीमेड में कुछ और विवरण के साथ

यदि आप केवल सादे वेनिला C ++ का उपयोग करने के लिए देख रहे हैं, यह बिल्कुल समर्थित है और वास्तव में किसी अन्य प्लेटफ़ॉर्म की तुलना में अलग नहीं है। Xcode में फ़ाइल> नई प्रोजेक्ट> कमांड लाइन यूटिलिटी> सी ++ टूल के लिए इसके लिए एक टेम्पलेट भी है। इसके अलावा, कई लोकप्रिय ओपन-सोर्स लाइब्रेरीज़ (लिबक्रल, लिम्बेक्समल 2, एसकेलाइट, आदि) ओएस एक्स के साथ आते हैं और डायनेमिक लिंकिंग के लिए उपलब्ध हैं। यदि आप नहीं चाहते हैं तो आपको कोको या एप्पल-विशिष्ट कुछ भी उपयोग नहीं करना है

यदि आप अपने ऐप के कुछ भागों में कोको का उपयोग करना चाहते हैं, तो उद्देश्य- C ++ पर एक नज़र डालें आप एक ही फाइल में .mm का विस्तार करके, या Xcode में फ़ाइल पर राइट-क्लिक करके और जानकारी प्राप्त कर सकते हैं> सामान्य तब Sourcecode.cpp.objcpp को फ़ाइल प्रकार बदलकर एक ही फाइल में C ++ और Object-C मिश्रण कर सकते हैं। दूसरा विकल्प उपयोगी है यदि आपके पास। सीपीपी फ़ाइल है जिसमें आप मक-विशिष्ट #ifdef के भीतर उद्देश्य-सी का उपयोग करना चाहते हैं।

हालांकि यह साल पुराना सवाल है …

मैंने कुछ कोको वर्गों के सी + + आवरण बनाने की कोशिश की है ।

यह बहुत अच्छा अनुभव था सी ++ उद्देश्य सी की तुलना में बेहतर प्रकार सुरक्षा प्रदान की, और मुझे कम कोड लिखने के लिए बनाया। लेकिन समय और मेमोरी सुरक्षा का संकलन खराब है। यह संभव है लेकिन कुछ गतिशील आधारित सुविधाओं को संभालना आसान नहीं था। मुझे लगता है कि यह सी ++ पर इसके साथ निपटने के लिए समझ में नहीं आता है

वैसे भी स्विफ्ट की घोषणा के कारण मेरी परियोजना आखिरकार त्याग गई थी यह पहले से सी + + का उपयोग करना चाहता था, और अधिक और बेहतर प्रदान करता है, यह सभी कारणों को मंजूरी दी।

यदि आप विशुद्ध रूप से ग्राफिकल एप्लीकेशन लिख रहे हैं, यानी आप सब कुछ कोड का उपयोग कर रहे हैं, तो ओपनफ्रेमवर्क पर विचार करें । सी / सी ++ के शीर्ष पर निर्मित एक ओपनसोर्स ग्राफिकल प्रोग्रामिंग भाषा है इसमें ऐडंस है जो लोगों को भाषा का विस्तार करने की इजाजत देता है। उनके पास आईफोन के लिए एक ऐडियन है मुझे विश्वास है कि यह लाइब्रेरी और XCode परियोजनाओं के साथ आता है जो आपको आईफोन और आइपॉड टच के लिए ऐप्स संकलित करने में मदद करेंगे।