Вы не можете написать приложение Какао полностью на C ++. Какао в значительной степени опирается на возможности позднего связывания Objective-C для многих своих основных технологий, таких как привязки значения ключа, делегаты (стиль Какао) и шаблон целевого действия. Поздние требования к связыванию делают очень сложным для реализации API-интерфейса Какао в типизированном языке с привязкой ко времени компиляции, таком как C ++ ⁱ. Конечно, вы можете написать чистое приложение на C ++, работающее на OS X. Оно просто не может использовать API-интерфейсы Cocoa.
Итак, у вас есть два варианта, если вы хотите поделиться кодом между приложениями C ++ на других платформах и вашим приложением на основе Cocoa. Во-первых, написать слой модели на C ++ и GUI в Какао. Это общий подход, используемый некоторыми очень большими приложениями, включая Mathematica . Ваш код C ++ может быть оставлен без изменений (вам не нужны «прикольные» расширения Apple для написания или компиляции 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 guide . В этом случае слой представления может быть чисто Objective-C.
Второй вариант - использовать кроссплатформенный инструментарий C ++. Набор инструментов Qt может соответствовать всем требованиям. Кроссплатформенные наборы инструментов, как правило, презираются пользователями Mac, потому что они не совсем точно смотрят и чувствуют детали, а пользователи Mac ожидают улучшения в пользовательском интерфейсе приложений Mac. Qt работает на удивление хорошо, однако, в зависимости от аудитории и использования вашего приложения, оно может быть достаточно хорошим. Кроме того, вы потеряете некоторые из технологий, специфичных для OS X, таких как Core Animation и некоторые функции QuickTime, хотя в Qt API есть приблизительные замены. Как вы указали, Carbon не будет перенесен на 64-битную версию. Поскольку Qt реализован на API-интерфейсах Carbon, Trolltech / Nokia пришлось портировать Qt на API-интерфейс Cocoa, чтобы сделать его 64-битным совместимым. Насколько я понимаю, следующий выпуск Qt (в настоящее время в выпуск Candiate ) завершает этот переход и является 64-битным совместимым на OS X. Возможно, вы захотите взглянуть на источник Qt 4.5, если вы ' Вы заинтересованы в интеграции C ++ и API Какао.
Apple Некоторое время Apple делала API-интерфейс Cocoa доступным для Java, но мост требовал обширной ручной настройки и был не в состоянии обрабатывать более продвинутые технологии, такие как привязки значения ключа, описанные выше. В настоящее время динамически типизированные языки с привязкой к среде выполнения, такие как Python, Ruby и т. Д., Являются единственным реальным вариантом для написания приложения Cocoa без Objective-C (хотя, конечно, эти мосты используют Objective-C под капотом).