Ich habe eine kleine C++ - Anwendung, die ich Objective-C-Klassen importiert. Es funktioniert als Objective-C++ - Dateien, .mm, aber jede C++ - Datei, die eine Kopfzeile enthält, die eventuell einen Objective-C-Header enthält, muss in eine .mm-Erweiterung für die richtigen GCC-Treiber umbenannt werden.Kann ich die C++ - Hauptfunktion und -Klassen von Objective-C- und/oder C-Routinen beim Kompilieren und Verknüpfen trennen?
Gibt es eine Möglichkeit, entweder einen reinen C++ - Wrapper für Objective-C-Klassen zu schreiben, oder kann ich die Objective-C-Objekte irgendwie trennen und nur separat verknüpfen? Vielleicht könnte ich, selbst wenn die Objective-C-Klassen eine kleine Bibliothek werden würden, zur Kompilierungszeit statisch neu verknüpfen?
Das Problem ist, dass dieser Code plattformübergreifend ist, und es ist schwieriger, auf Systemen zu kompilieren, die normalerweise Objective-C nicht verwenden (d. H. Nicht Macs). Obwohl Präprozessorbefehle jede Implementierung von Objective-C-Code unter Windows oder Linux einschränken, hat der ursprüngliche Code immer noch die Erweiterung .mm und GCC behandelt den Code weiterhin als Objective-C++.
also würde struct Wrapper :: Opaque 'OBJCClass * name = [[OBJCClass alloc] init]' und Wrapper :: f() würde [Name f] aufrufen, wenn es so verknüpft war? –
Ja, Sie könnten die enthaltene Objective-C-Klasse im Wrapper- oder Opaque-Konstruktor zuweisen und initialisieren, was auch immer Ihnen passt, und die C++ - Klassenmethoden würden die Aufrufe an Ihre Objective-C-Klasse weiterleiten. –