Sie müssen Objective-C++ verwenden, wenn Sie entweder #include
/#import
ing sind oder direkt sowohl Objective-C und C++ Code in der gleichen Datei zu schreiben. Es ist normalerweise offensichtlich mit explizitem Code; Die #include
sind oft weniger, und Sie müssen darauf achten, dass eine der Sprachen nicht zu sehr in die andere übergeht. Ihr Beispiel #import
eine C++ - Header-Datei ist klar: Sie können das nur mit Objective-C++ tun. Beachten Sie, dass, wenn Ihr Cplusplus
ein struct
-Typ ist, Sie es als einen solchen anstelle von #import
in einem C++ - Header weiterleiten können.
Wenn Sie dies in einer Kopfzeile tun, "vergiftet" es die Kopfzeile, nur in diesem Modus zu arbeiten. Sie müssen dies aktiv vermeiden oder Ihr gesamtes Projekt wird bald nur mit .mm-Dateien enden. I have documented some techniques in this article und previously, in this earlier article. Für neuere Versionen von Objective-C können Sie den Klassen in den Kategorieerweiterungen auch Ivars hinzufügen. Dies bedeutet, dass Sie C++ - typisierte Ivars in Ihrer .mm-Datei definieren können, nicht die Kopfzeile, die .m-Dateien zu #import
es ermöglicht.
Für Ihre zweite Frage (Bitte fragen Sie nur noch eine Frage zu einem Zeitpunkt): die id
Typ in der in Bezug auf die C objc.h
Header-Datei definiert ist und somit sowohl in Objective-C und C++ arbeiten. Ebenso wird die Objective-C-Laufzeit-API in Form von C-Funktionen dargestellt, die auch von C++ aus funktionieren. Wenn Sie tatsächlich Nachrichten senden und auf Objective-C-Objekte mit der kanonischen Syntax aus C++ - Code zugreifen möchten, müssen Sie diese Datei auf Objective-C++ umstellen.
Was meinen Sie mit "bei der Verwendung eines Objekts in einer .m-Datei, die zu einer C++ - Klasse gehört"? – pmdj
@pmjordan: wenn ich eine Zusammensetzung von C++ - Objekt in objective-c-Schnittstelle mache. #import "cplusplus.h“ Schnittstelle xyz: NSObject { { Cplusplus * myobj; }} – tusharfloyd