Bạn không thể viết một ứng dụng Cocoa hoàn toàn bằng C ++. Cacao chủ yếu dựa vào khả năng ràng buộc muộn của Objective-C đối với nhiều công nghệ cốt lõi của nó như Liên kết giá trị chính, các đại biểu (kiểu Cacao) và mô hình hành động mục tiêu. Các yêu cầu liên kết muộn khiến việc triển khai Cocoa API rất khó khăn trong một ngôn ngữ được đánh máy, giới hạn thời gian biên dịch như C ++ ⁱ. Tất nhiên, bạn có thể viết một ứng dụng C ++ thuần chạy trên OS X. Nó chỉ không thể sử dụng các API Cocoa.
Vì vậy, bạn có hai tùy chọn nếu bạn muốn chia sẻ mã giữa các ứng dụng C ++ trên các nền tảng khác và ứng dụng dựa trên Cocoa của bạn. Đầu tiên là viết lớp mô hình trong C ++ và GUI trong Cocoa. Đây là cách tiếp cận phổ biến được sử dụng bởi một số ứng dụng rất lớn, bao gồm cả Mathematica . Mã C ++ của bạn có thể được giữ nguyên (bạn không cần phần mở rộng táo "sôi nổi" để viết hoặc biên dịch C ++ trên OS X). Lớp điều khiển của bạn có thể sẽ sử dụng Objective-C ++ (có lẽ là tiện ích mở rộng Apple "sôi nổi" mà bạn đề cập đến). Objective-C ++ là một tập hợp con của C ++, cũng như Objective-C là tập hợp con của C. Trong Objective-C ++, bạn có thể thực hiện thông báo kiểu objc chuyển các cuộc gọi (như [some-objc-object callMethod];
) từ bên trong một hàm C ++. Ngược lại, bạn có thể gọi các hàm C ++ từ trong mã ObjC như:
@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
Bạn có thể tìm hiểu thêm về Objective-C ++ trong hướng dẫn ngôn ngữ Objective-C . Lớp xem sau đó có thể là Objective-C thuần túy.
Tùy chọn thứ hai là sử dụng bộ công cụ C ++ đa nền tảng. các Qtbộ công cụ có thể phù hợp với hóa đơn. Các bộ công cụ đa nền tảng thường bị người dùng Mac coi thường vì chúng không có được tất cả các chi tiết về giao diện và cảm nhận một cách chính xác và người dùng Mac mong đợi sự cải tiến trong giao diện người dùng của các ứng dụng Mac. Tuy nhiên, Qt thực hiện một công việc tốt đáng ngạc nhiên và tùy thuộc vào đối tượng và việc sử dụng ứng dụng của bạn, nó có thể đủ tốt. Ngoài ra, bạn sẽ mất đi một số công nghệ dành riêng cho OS X như Core Animation và một số chức năng QuickTime, mặc dù có những thay thế gần đúng trong Qt API. Như bạn đã chỉ ra, Carbon sẽ không được chuyển sang 64-bit. Vì Qt được triển khai trên các API Carbon, Trolltech / Nokia đã phải chuyển Qt sang API Cocoa để làm cho nó tương thích với 64-bit. Tôi hiểu rằng bản phát hành tiếp theo của Qt (hiện đang được phát hành) hoàn thành quá trình chuyển đổi này và tương thích 64-bit trên OS X. Bạn có thể muốn xem nguồn của Qt 4.5 nếu bạn quan tâm đến việc tích hợp C ++ và các API Cocoa.
ⁱ Trong một thời gian, Apple đã cung cấp Cocoa API cho Java, nhưng cầu nối này yêu cầu điều chỉnh bằng tay rộng rãi và không thể xử lý các công nghệ tiên tiến hơn như Key-Value Bindings được mô tả ở trên. Hiện tại, các ngôn ngữ có ràng buộc thời gian chạy, được nhập động như Python, Ruby, v.v. là lựa chọn thực sự duy nhất để viết ứng dụng Cocoa mà không có Objective-C (mặc dù tất nhiên các cầu nối này sử dụng Objective-C).