Você não pode escrever um aplicativo Cocoa inteiramente em C ++. O cacau depende muito dos recursos de vinculação tardia do Objective-C para muitas de suas principais tecnologias, como vinculações de valor-chave, delegados (estilo cacau) e o padrão de ação-alvo. Os requisitos de ligação tardia tornam muito difícil implementar a API do Cocoa em uma linguagem digitada vinculada ao tempo de compilação, como o C ++ ⁱ. Obviamente, você pode escrever um aplicativo C ++ puro que seja executado no OS X. Ele simplesmente não pode usar as APIs do Cocoa.
Portanto, você tem duas opções se desejar compartilhar código entre aplicativos C ++ em outras plataformas e seu aplicativo baseado em Cocoa. O primeiro é escrever a camada do modelo em C ++ e a GUI no cacau. Essa é uma abordagem comum usada por aplicativos muito grandes, incluindo o Mathematica . Seu código C ++ pode permanecer inalterado (você não precisa de extensões "funky" da apple para escrever ou compilar C ++ no OS X). Sua camada do controlador provavelmente fará uso do Objective-C ++ (talvez a extensão "descolada" da Apple a que você se refere). Objective-C ++ é um superconjunto de C ++, assim como Objective-C é um superconjunto de C. No Objective-C ++, você pode fazer chamadas no estilo objc passando mensagens (como [some-objc-object callMethod];
) de dentro de uma função C ++. Por outro lado, você pode chamar funções C ++ de dentro do 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
Você pode descobrir mais sobre o Objective-C ++ no guia de idiomas da Objective-C . A camada de visualização pode então ser pura Objective-C.
A segunda opção é usar um kit de ferramentas C ++ entre plataformas. The Qtkit de ferramentas pode ser adequado. Os kits de ferramentas de plataforma cruzada geralmente são desprezados pelos usuários de Mac, porque não obtêm todos os detalhes de aparência e aparência exatamente corretos e os usuários de Mac esperam polimento na interface do usuário dos aplicativos Mac. No entanto, o Qt faz um trabalho surpreendentemente bom e, dependendo do público e do uso do seu aplicativo, pode ser bom o suficiente. Além disso, você perderá algumas das tecnologias específicas do OS X, como Core Animation e algumas funcionalidades do QuickTime, embora haja substituições aproximadas na API Qt. Como você aponta, o Carbon não será portado para 64 bits. Desde que o Qt é implementado nas APIs do Carbon, a Trolltech / Nokia precisou portar o Qt para a API do cacau para torná-lo compatível com 64 bits. Meu entendimento é que a próxima versão do Qt (atualmente em versão candiate) conclui essa transição e é compatível com 64 bits no OS X. Você pode dar uma olhada na fonte do Qt 4.5 se estiver interessado em integrar o C ++ e as APIs do Cocoa.
Por um tempo, a Apple disponibilizou a API Cocoa para Java, mas a ponte exigiu um amplo ajuste manual e não foi capaz de lidar com as tecnologias mais avançadas, como as Vinculações de valor-chave descritas acima. Atualmente, linguagens dinamicamente tipadas e vinculadas ao tempo de execução, como Python, Ruby etc., são a única opção real para escrever um aplicativo Cocoa sem o Objective-C (embora, obviamente, essas pontes usem o Objective-C sob o capô).
Bem, pode parecer bobagem, mas, na verdade, podemos escrever código C ++ puro para criar GUI para Mac OS X, mas precisamos vincular o framework Cocoa.
fonte
objc_getClass
com(id)objc_getClass
Sim, você pode apenas usar C ++ (ou seja, gravá-lo em arquivos * .cpp) e até misturar C ++ e Objective-C em arquivos * .mm (o código Objective-C padrão é armazenado em arquivos * .m).
Obviamente, você ainda precisará usar o Objective-C para sua interface com o usuário e criar wrappers Objective-C para seus objetos C ++. Outra opção é mudar para o Qt, que é uma estrutura C ++ que suporta Windows, Mac OS X e Linux - e será lançada sob a LGPL na próxima versão 4.5.
fonte
Sim, você pode misturá-los.
Você precisa usar o Objective-C para operar diretamente em seus objetos da GUI e receber notificações deles.
Esses objetos Objective-C podem chamar diretamente a lógica C ++ se você os colocar em arquivos .mm, em vez dos arquivos puros de Objective-C .m. Observe que você pode ver conselhos (muito) mais antigos sugerindo o uso de um .M maiúsculo para indicar Objective-C ++, mas isso é muito esquisito e provavelmente confunde você e o compilador.
Você não precisa agrupar todos os objetos C ++, mas seu código Objective-C precisará conter ponteiros para eles.
A Apple não publica mais nenhuma amostra mostrando como fazer isso.
Há um ótimo vídeo de Peter Steinberger hospedado no Realm [Objective] C ++: O que poderia dar errado? Eu recomendo para qualquer pessoa que ainda esteja usando o Objective-C ++ e você pode examinar rapidamente a transcrição.
fonte
Se você deseja usar o C ++ vanilla comum, isso é absolutamente suportado e realmente não é diferente de qualquer outra plataforma. O Xcode ainda possui um modelo em Arquivo> Novo projeto> Utilitário de linha de comando> Ferramenta C ++. Além disso, várias bibliotecas populares de código aberto (libcurl, libxml2, sqlite, etc) vêm com o OS X e estão disponíveis para vinculação dinâmica. Você não precisa usar cacau ou algo específico da Apple, se não quiser.
Se você deseja usar o cacau em certas partes do seu aplicativo, consulte Objective-C ++ . Você pode misturar C ++ e Objective-C no mesmo arquivo, fornecendo uma extensão de .mm ou clicando com o botão direito do mouse no arquivo no Xcode e selecionando Obter informações> Geral e alterando o Tipo de arquivo para sourcecode.cpp.objcpp. A segunda opção é útil se você tiver um arquivo .cpp no qual deseja usar o Objective-C em um #ifdef específico do Mac.
fonte
Embora esta seja uma pergunta de anos ...
Eu tentei fazer wrapper C ++ de algumas classes de cacau .
Foi uma experiência bastante agradável. O C ++ forneceu uma segurança de tipo melhor que o Objective-C e me fez escrever menos código. Mas o tempo de compilação e a segurança da memória são piores. É possível, mas alguns recursos dinâmicos não foram fáceis de manusear. Eu acho que não faz sentido lidar com isso em C ++.
Enfim, meu projeto foi finalmente abandonado devido ao anúncio de Swift. Ele limpou todos os motivos pelos quais eu queria usar C ++ no início e fornece ainda mais e melhor.
fonte
Se você está escrevendo um aplicativo puramente gráfico, ou seja, está desenhando tudo usando o código, considere openFrameworks . É uma linguagem de programação gráfica de código aberto criada sobre C / C ++. Possui complementos que permitem que as pessoas estendam o idioma. Eles têm um addon para o iphone . Acredito que ele vem com a biblioteca e os projetos XCode que ajudarão você a compilar aplicativos para o iPhone e iPod touch.
fonte