è necessario utilizzare Objective-C++ ogni volta che si sono o #include
/#import
ing o direttamente scrivendo sia Objective-C e il codice C++ nello stesso file. Di solito è ovvio con codice esplicito; i #include
sono spesso meno così, e bisogna stare attenti ad evitare di "far fuoriuscire" una delle lingue in troppa delle altre. Il tuo esempio di #import
in un file di intestazione C++ è chiaro: puoi farlo solo con Objective-C++. Si noti che se il proprio Cplusplus
era un tipo struct
, è possibile inoltrarlo-dichiararlo come tale anziché #import
in un'intestazione C++.
Se si esegue questa operazione in un'intestazione, "avvelena" l'intestazione per funzionare solo in tale modalità. Dovrai evitarlo attivamente, o il tuo intero progetto finirà presto con solo file .mm. I have documented some techniques in this article e previously, in this earlier article. Per le versioni più recenti di Objective-C, puoi anche aggiungere ivars alle classi nelle estensioni di categoria. Ciò significa che è possibile definire gli ivars tipizzati in C++ nel file .mm, non nell'intestazione, che consente i file .m a #import
.
riguarda la seconda domanda (chiedere prega di una sola domanda alla volta): il tipo id
è definito nel file di intestazione objc.h
in termini di C e, quindi, lavoreranno sia in Objective-C e C++. Allo stesso modo, l'API runtime Objective-C è esposta in termini di funzioni C, che funzionerà anche da C++. Se in realtà si desidera inviare messaggi e accedere alle proprietà sugli oggetti Objective-C con la sintassi canonica del codice C++, sarà necessario passare tale file a Objective-C++.
Cosa intendi con "durante l'utilizzo di un oggetto nel file .m che appartiene a una classe C++"? – pmdj
@pmjordan: se sto facendo una composizione di oggetti C++ nell'interfaccia obiettivo-c. #import "cplusplus.h" interfaccia xyz: NSObject {{ Cplusplus * myobj; }} – tusharfloyd