2009-04-11 11 views
6

Voglio fare un'app per iPhone, ma sto progettando di realizzare il framework in C++. È possibile utilizzare cose come i modelli in Objective-C++. Immagino che la domanda sia, posso usare boost?Quanto di C++ è supportato in Objective-C++

+0

Questo potrebbe non essere così utile come risposta, ma se conosci già il C++, raccogliere l'Objective-C dovrebbe essere un gioco da ragazzi. A meno che, naturalmente, non porti il ​​porting di un'app, capisco di più la domanda. – Sean

+0

Può avere senso usare C++ quando hai bisogno di prestazioni molto elevate, come in un motore di gioco. –

risposta

10

Tutto il C++ è supportato in Objective C++. Dovrebbe essere possibile usare boost, ma potrebbe essere necessario portare alcune delle cose dipendenti dalla piattaforma.

+2

Ho usato boost senza alcuna alterazione. Ha funzionato subito fuori dagli schemi. –

+1

Le librerie di boost principali dovrebbero funzionare ma alcune delle librerie relative a IO probabilmente non funzioneranno immediatamente. – Zifre

+1

Zifre: Vero che devi lavorare con quelli. –

4

Objective C++ è un superset di C++. Tutto ciò che puoi fare in C/C++ può essere fatto in Obj-C++. La parte "Obiettivo" contiene, tra le altre cose, un sistema di messaggistica Smalltalk-esque e altre aggiunte a C++.

4

Va sottolineato che non è possibile fare tutto ciò che è possibile fare in C++ in Objective-C++. Ad esempio non è possibile chiamare funzioni virtuali su oggetti C++ da una classe Objective-C. Una volta che chiami in una funzione C/C++ puoi comunque fare quello che vuoi.

+0

Non credo sia corretto. Puoi chiamare i metodi virtuali C++ dal codice Objective-C++. –

+0

http://tinyurl.com/yfrxwg9 "Objective-C++ si sforza allo stesso modo di consentire alle istanze di classe C++ di servire come variabili di istanza. Ciò è possibile finché la classe C++ in questione (insieme a tutte le sue superclassi) non ha alcuna funzione membro virtuale definita. Se sono presenti funzioni membro virtuali, la classe C++ potrebbe non servire come variabile di istanza Objective-C. " Appare nelle versioni più recenti del sistema operativo che questo non è un problema, ma penso che sia sul sistema operativo iPHONE. –

2

Gli oggetti C++ nell'Objective C NON agiranno necessariamente come in C++. Ad esempio costruttori e distruttori non vengono automaticamente chiamati e (penso) che non è possibile implementare metodi virtuali ...

13

È possibile utilizzare cose come i modelli in Objective-C++.

Sì, ma è necessario fare attenzione a come si mescolano i tipi e le interfacce tra i livelli C++ puro e il codice Objective-C++. Tenere presente i confini tra i livelli, in cui è necessario convertire tipi come std::string in NSString e così via.

Ad esempio, è possibile implementare il motore di gioco di base in puro C++ e implementare solo i controller e il codice GUI in Objective-C++. Quindi il codice Obj-C++ è la colla tra il motore C++ puro e Cocoa.

Immagino che la domanda sia, posso usare boost?

Dato l'iPhone OS è un sottoinsieme di OS X che fornisce ancora un livello di piena POSIX, la maggior parte delle librerie Boost dovrebbe funzionano bene. Dovrebbe essere proprio come scrivere il codice Darwin.

Ci sono una serie di limitazioni in Objective-C++ di essere a conoscenza di (presa direttamente dalla Objective-C 2.0 Reference Guide):

  • non è possibile utilizzare la sintassi Objective-C per chiamare un oggetto C++
  • non è possibile aggiungere costruttori o distruttori di un oggetto Objective-C
  • non è possibile utilizzare le parole chiave questo e intercambiabile tra loro
  • le gerarchie di classi sono separate; una classe C++ non può ereditare da una classe Objective-C e una classe Objective-C non può ereditare da una classe C++
  • un'eccezione generata nel codice Objective-C non può essere rilevata nel codice C++ e, al contrario, un'eccezione generata in C++ il codice non può essere catturato nel codice Objective-C.
+1

Se hai intenzione di downvotare una risposta, il minimo che puoi fare è indicarne il motivo. La risposta accettata (attualmente con 9 voti) afferma piuttosto semplicisticamente che tutte le caratteristiche del C++ sono disponibili. Questa risposta dice un sì qualificato e cita direttamente dal riferimento al linguaggio che spiega le limitazioni e viene downvoted. Come funziona? – gavinb

+0

La limitazione n. 2 viene ascoltata come metodo generale C++ può essere aggiunto alla classe Objective-C. Ma è difficile credere che sia possibile aggiungere il metodo C++ alla classe Objective-C. Puoi spiegare di più su questo? Perché il collegamento è rotto non riesco a controllarlo di più. – Eonil

+1

Purtroppo non riesco a trovare un documento equivalente per sostituire quanto sopra. Ho inviato una nota al team di documentazione di ADC per richiederne il ripristino. Il punto 2 indica semplicemente che una classe ObjC in un modulo '.mm' ha ancora gli stessi metodi' init' e 'dealloc' per la gestione del ciclo di vita; semplicemente non è possibile combinare approcci ObjC e C++ all'interno della stessa classe. Non è possibile aggiungere un metodo C++ alla classe ObjC, ma è possibile chiamare tra i due all'interno di .'mm'. Spero che questo chiarisca quanto sopra. – gavinb

1

Boost è utile ma è anche un grande overhead da aggiungere a un progetto.

Assicurati di averne veramente bisogno prima di aggiungerlo.

Per il supporto Regex: RegexLite.

Per tutto il resto: Cacao.