Schreiben Sie ein C++ - Wrapper für Objective-C
Möchte ich nennen, und die Arbeit mit Objective-C-Klassen aus C++ - Projekt auf OS X. Es ist Zeit zu beginnen, bewegen sich auf allen Objective-C, aber wir müssen dies über einige Zeit.
Wie ist dies zu erreichen? Kann jemand etwas Licht und ein Beispiel geben?
Sind Sie versuchen, um call-Stiftung (non-UI) Objekte oder AppKit (UI) Objekte? Rufen Sie
mögliche Duplikate von Aufruf von Objective-C-Methode aus C++ - Methode?
Es ist eine Objektive-c++ - tag auf, SO dass Sie sollten überprüfen, wie gut. stackoverflow.com/questions/tagged/objective-c++
Napier - Beide-Stiftung und die App Kit. Dateisystem-Aufrufe und die Dialogfelder für das öffnen von Dateien, speichern, alerts, etc.
NSApplicationMain()
im main()
oder sind Sie versuchen zu vermeiden?mögliche Duplikate von Aufruf von Objective-C-Methode aus C++ - Methode?
Es ist eine Objektive-c++ - tag auf, SO dass Sie sollten überprüfen, wie gut. stackoverflow.com/questions/tagged/objective-c++
Napier - Beide-Stiftung und die App Kit. Dateisystem-Aufrufe und die Dialogfelder für das öffnen von Dateien, speichern, alerts, etc.
InformationsquelleAutor JTO | 2011-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Objective-C++ ist eine Obermenge von C++, so wie Objective-C ist eine Obermenge von C. Es unterstützt sowohl die gcc-und clang-Compiler unter OS X und ermöglicht es Ihnen, zu instanziieren und Aufruf Objective-C-Objekte & Methoden in C++. Solange Sie verstecken das Objective-C header-Importe und-Typen innerhalb der Implementierung eines C++ - Moduls, es wird nicht infizieren alle Ihre "Reine" C++ - code.
.mm
ist die Standard-Erweiterung für Objective-C++. Xcode wird automatisch das richtige tun.So, zum Beispiel, wird die folgende C++ - Klasse gibt die Sekunden seit dem 1 Jan., 1970:
Werden Sie schnell feststellen, dass Objective-C++ ist sogar noch langsamer zu kompilieren als C++, aber wie Sie oben sehen können, es ist relativ leicht zu isolieren, die seine Verwendung für eine kleine Anzahl von Klassen Brücke.
InformationsquelleAutor
Ich glaube, es war Phil Jordan, dass wirklich legte das beste C++ gewickelt Obj-C-Formel. Aber ich denke, letzteres, C++, umhüllt von Obj-C ist mehr nützlich. Ich werde erklären, warum unten.
Die Verpackung eines Objective-C-Objekt mit C++
Person.h - Obj-C-header
PersonImpl.h - Der C++ - header -
Person.mm - Obj-C++ - Implementierung
Wickeln eines C++ - Objekt mit Objective-C
Habe ich oft das eigentliche problem ist nicht immer C++ zu sprechen, um Obj-C-code, es ist hin-und her wechseln zwischen den beiden, wo die Dinge hässlich. Stellen Sie sich ein Objekt haben muss, um C++-nur Positionen, aber das grundlegende Objekt details ausgefüllt werden, in Obj-C land. In diesem Fall, ich Schreibe das Objekt in C++ und dann es so machen, mit dem ich reden kann es in Obj-C.
Person.h - Der C++ - header -
Person.cpp - Die C++ - Implementierung
Person.h - Obj-C-header
Person.mm - Obj-C++ - Implementierung
Bezüglich der void *
Der zweite Sie ging in das land, von C++, die Sie im Begriff waren, zu Schmerzen verspüren, wenn Sie vermeiden wollen, das gesamte Projekt wird übersät mit
.mm
- Dateien. Also, lasst uns einfach sagen, wenn Sie nicht denken, es ist immer notwendig, um Ihre C++ - Objekt zurück, oder Rekonstitution der Obj-C-Objekt mit der C++ - Objekt, das Sie entfernen können, dass code. Es ist wichtig zu beachten, dass die zweite entfernen Sie diePerson
Instanz von Obj-C-code durch dievoid *
Methode, die Sie besser machen Sie Ihre eigene Kopie mit dem copy-Konstruktor oder der Zeiger ungültig wird.InformationsquelleAutor
Ersten Dateien umbenennen von *.m *.mm, so erhalten Sie die Objective-C++
Habe ich nicht müde, also ist es Spekulation (ich werde heute Abend):
Als alle Objective-C++ - Objekte (Referenz gezählt) erfolgt über Zeiger, so dass Sie schreiben können, einen speziellen Destruktor für shared pointer.
Nun können Sie Ihre stick Objective-C obects in einem boost::shared_ptr
type_traits
für is_ObjC_obj und spezialisieren sich auf 😉InformationsquelleAutor
Überprüfen Sie heraus diese Frage Aufruf von Objective-C-Methode aus C++ - Methode?
Werden Sie brauchen, um einige objective-c-Klassen zu wickeln Sie den code und setzen mit einer C-Funktion.
InformationsquelleAutor