No puede escribir una aplicación Cocoa por completo en C ++. El cacao depende en gran medida de las capacidades de enlace tardío de Objective-C para muchas de sus tecnologías principales, como los enlaces de valor clave, los delegados (estilo Cocoa) y el patrón de acción objetivo. Los requisitos de enlace tardío hacen que sea muy difícil implementar la API de Cocoa en un lenguaje tipado de tiempo de compilación como C ++ ⁱ. Por supuesto, puede escribir una aplicación C ++ pura que se ejecute en OS X. Simplemente no puede usar las API de Cocoa.
Por lo tanto, tiene dos opciones si desea compartir código entre aplicaciones C ++ en otras plataformas y su aplicación basada en Cocoa. El primero es escribir la capa del modelo en C ++ y la GUI en Cocoa. Este es un enfoque común utilizado por algunas aplicaciones muy grandes, incluida Mathematica . Su código C ++ puede dejarse sin cambios (no necesita extensiones de manzana "funky" para escribir o compilar C ++ en OS X). Es probable que su capa de controlador haga uso de Objective-C ++ (tal vez la extensión "funky" de Apple a la que se refiere). Objective-C ++ es un superconjunto de C ++, al igual que Objective-C es un superconjunto de C. En Objective-C ++, puede hacer que los mensajes de estilo objc pasen llamadas (como [some-objc-object callMethod];
) desde una función de C ++. Por el contrario, puede llamar a funciones C ++ desde el código ObjC como:
@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
Puede encontrar más información sobre Objective-C ++ en la guía del lenguaje Objective-C . La capa de vista puede ser pura Objective-C.
La segunda opción es utilizar un kit de herramientas C ++ multiplataforma. El qtEl juego de herramientas podría ajustarse a la factura. Los kits de herramientas multiplataforma generalmente son despreciados por los usuarios de Mac porque no obtienen todos los detalles de aspecto y sensación exactamente correctos y los usuarios de Mac esperan pulir en la interfaz de usuario de las aplicaciones de Mac. Qt hace un trabajo sorprendentemente bueno, sin embargo, y dependiendo de la audiencia y el uso de su aplicación, puede ser lo suficientemente bueno. Además, perderá algunas de las tecnologías específicas de OS X, como Core Animation y algunas funciones de QuickTime, aunque hay reemplazos aproximados en la API Qt. Como señala, el carbono no se portará a 64 bits. Dado que Qt se implementa en las API de carbono, Trolltech / Nokia ha tenido que portar Qt a la API de Cocoa para que sea compatible con 64 bits. Tengo entendido que la próxima versión de Qt (actualmente en versión candiate) completa esta transición y es compatible con 64 bits en OS X. Si lo desea, puede consultar la fuente de Qt 4.5 si está interesado en integrar C ++ y las API de Cocoa.
ⁱ Durante un tiempo, Apple puso la API de Cocoa a disposición de Java, pero el puente requirió un ajuste manual extenso y no pudo manejar las tecnologías más avanzadas, como los enlaces de valor clave descritos anteriormente. Actualmente, los lenguajes de tiempo de ejecución de tipo dinámico, como Python, Ruby, etc., son la única opción real para escribir una aplicación Cocoa sin Objective-C (aunque, por supuesto, estos puentes usan Objective-C bajo el capó).