Ich muss Objective-C und C++ mischen. Ich möchte alle C++-Sachen in einer Klasse verstecken und alle anderen in Objective-C belassen. Das Problem ist, dass ich einige C++-Klassen als Instanzvariablen haben möchte. Das bedeutet, dass sie in der Header-Datei erwähnt werden müssen, die von anderen Klassen eingebunden wird, und C++ beginnt, sich in der gesamten Anwendung auszubreiten. Die beste Lösung, die ich bisher gefunden habe, sieht so aus:
#ifdef __cplusplus
#import "cppheader.h"
#endif
@interface Foo : NSObject
{
id regularObjectiveCProperty;
#ifdef __cplusplus
CPPClass cppStuff;
#endif
}
@end
Das funktioniert. Die Implementierungsdatei hat eine mm
Erweiterung, so dass sie als Objective-C gemischt mit C++ kompiliert wird, die #ifdef
schaltet die C++-Sachen frei und los geht's. Wenn eine andere, reine Objective-C-Klasse den Header importiert, wird der C++-Kram ausgeblendet und die Klasse sieht nichts Besonderes. Das sieht wie ein Hack aus, gibt es eine bessere Lösung?
1 Stimmen
Das ist im Grunde das, was mir eingefallen ist, als ich das gleiche Problem hatte. Aber achten Sie auf Ihre ifdef: Sie müssen Padding für den non-cpp-Zweig einfügen. Ansonsten würde der Compiler die Größe der Foo-Objekte nicht kennen. Während dies bei nicht-fragilen Instance-Var-Builds vielleicht nicht scheitert, ist es definitiv ein Problem für Ziele im alten Stil.
0 Stimmen
Ich habe die von Ihnen oben beschriebene Vorgehensweise kopiert. Schien ziemlich nett und einfach, aber dann verursachte es einige verrückte Probleme mit der Speicherkorruption: stackoverflow.com/questions/2458652/