คุณไม่สามารถเขียนแอปพลิเคชัน Cocoa ใน C ++ ได้ทั้งหมด Cocoa อาศัยความสามารถในการผูกมัดในช่วงปลายของ Objective-C สำหรับเทคโนโลยีหลักหลายอย่างเช่นการเชื่อมโยงคีย์ - ค่าผู้แทน (รูปแบบโกโก้) และรูปแบบการดำเนินการตามเป้าหมาย ข้อกำหนดการผูกล่าช้าทำให้ยากมากที่จะใช้ Cocoa API ในภาษาพิมพ์ที่ จำกัด เวลาคอมไพล์เช่น C ++ ⁱ แน่นอนคุณสามารถเขียนแอป C ++ แท้ที่ทำงานบน OS X ได้ แต่ไม่สามารถใช้ Cocoa API ได้
ดังนั้นคุณมีสองตัวเลือกหากคุณต้องการแชร์โค้ดระหว่างแอพ C ++ บนแพลตฟอร์มอื่นและแอปพลิเคชันที่ใช้โกโก้ของคุณ อย่างแรกคือการเขียนเลเยอร์โมเดลใน C ++ และ GUI ใน Cocoa นี้เป็นวิธีการที่ใช้โดยทั่วไปปพลิเคชันที่มีขนาดใหญ่มากบางคนรวมทั้งMathematica โค้ด C ++ ของคุณจะไม่เปลี่ยนแปลง (คุณไม่จำเป็นต้องมีส่วนขยายของแอปเปิ้ลที่ "ขี้ขลาด" ในการเขียนหรือรวบรวม C ++ บน OS X) เลเยอร์คอนโทรลเลอร์ของคุณน่าจะใช้ประโยชน์จาก Objective-C ++ (อาจเป็นส่วนขยายของ Apple ที่ "ขี้ขลาด" ที่คุณอ้างถึง) Objective-C ++ เป็นส่วนเหนือของ C ++ เช่นเดียวกับที่ Objective-C เป็นส่วนเหนือของ C ใน Objective-C ++ คุณสามารถสร้างข้อความสไตล์ objc ผ่านการโทร (เช่น[some-objc-object callMethod];
) จากภายในฟังก์ชัน C ++ ในทางกลับกันคุณสามารถเรียกใช้ฟังก์ชัน C ++ จากภายในรหัส ObjC เช่น:
@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
คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับ Objective-C ++ ในภาษา Objective-C คู่มือ จากนั้นเลเยอร์มุมมองสามารถเป็น Objective-C ที่บริสุทธิ์ได้
ตัวเลือกที่สองคือการใช้ชุดเครื่องมือ C ++ ข้ามแพลตฟอร์ม Qtชุดเครื่องมืออาจพอดีกับใบเรียกเก็บเงิน โดยทั่วไปแล้วชุดเครื่องมือข้ามแพลตฟอร์มมักจะถูกผู้ใช้ Mac ดูหมิ่นเพราะพวกเขาไม่ได้รับรายละเอียดรูปลักษณ์และความรู้สึกที่ถูกต้องทั้งหมดและผู้ใช้ Mac คาดหวังว่า UI ของแอปพลิเคชัน Mac จะขัดเกลา อย่างไรก็ตาม Qt ทำได้ดีอย่างน่าประหลาดใจและอาจจะดีพอขึ้นอยู่กับผู้ชมและการใช้แอปของคุณ นอกจากนี้คุณจะสูญเสียเทคโนโลยีเฉพาะ OS X บางอย่างเช่น Core Animation และฟังก์ชัน QuickTime บางอย่างแม้ว่าจะมีการแทนที่โดยประมาณใน Qt API ตามที่คุณระบุ Carbon จะไม่ถูกย้ายไปที่ 64 บิต เนื่องจาก Qt ถูกนำไปใช้กับ Carbon APIs Trolltech / Nokia จึงต้องพอร์ต Qt ไปยัง Cocoa API เพื่อให้เข้ากันได้ 64 บิต ความเข้าใจของฉันคือความสัมพันธ์ถัดไปของ Qt (ปัจจุบันอยู่ในรุ่น candiate) เสร็จสิ้นการเปลี่ยนแปลงนี้และเข้ากันได้กับ OS X แบบ 64 บิตคุณอาจต้องการดูที่มาของ Qt 4.5 หากคุณสนใจที่จะผสานรวม C ++ และ Cocoa API
ⁱในขณะที่ Apple ให้ Cocoa API พร้อมใช้งานใน Java แต่บริดจ์นั้นต้องการการปรับแต่งด้วยมืออย่างกว้างขวางและไม่สามารถจัดการกับเทคโนโลยีขั้นสูงเช่น Key-Value Bindings ที่อธิบายไว้ข้างต้นได้ ขณะนี้พิมพ์แบบไดนามิกภาษาที่ผูกกับรันไทม์เช่น Python, Ruby และอื่น ๆ เป็นตัวเลือกเดียวที่แท้จริงสำหรับการเขียนแอป Cocoa โดยไม่มี Objective-C (แม้ว่าสะพานเหล่านี้จะใช้ Objective-C ภายใต้ประทุนก็ตาม)