Ich versuche C++ und Objective-C zu mischen, ich habe es größtenteils gemacht, hätte aber gerne eine einzige Interface-Klasse zwischen Objective-C und C++. Daher möchte ich ein persistentes C++ - Objekt in der ViewController-Schnittstelle haben.C++ - Objekt zur Objective-C-Klasse hinzufügen
Dies ohne Typ durch das Verbot der Erklärung von ‚myCppFile‘ versagt:
#import <UIKit/UIKit.h>
#import "GLView.h"
#import "myCppFile.h"
@interface GLViewController : UIViewController <GLViewDelegate>
{
myCppFile cppobject;
}
@end
Doch diese ganz gut in der .mm Implementierungsdatei funktioniert (es funktioniert nicht, weil ich cppobject zwischen den Anrufen beharren wollen
)#import "myCppFile.h"
@implementation GLViewController
- (void)drawView:(UIView *)theView
{
myCppFile cppobject;
cppobject.draw();
}
Danke, die anderen Vorschläge schienen nicht zu funktionieren und ich endete damit, mein Objekt als "id *" zu deklarieren und es dann an den richtigen Typ zu übertragen, wo immer ich es verwenden wollte. Dies scheint die gleiche Idee zu sein, ist aber viel sauberer, da ich nicht alle zusätzlichen Casts machen muss. – Winder
Ich würde immer undurchsichtige Zeiger auf Guss bevorzugen - es könnte ein bisschen mehr Arbeit sein, aber Sie bekommen volle Typsicherheit zurück. –
Ich habe mit undurchsichtigen Zeigern dafür gespielt, die ich ausgiebig für C/C++ - Wrapping verwende, aber bis jetzt habe ich den wirklichen Vorteil nicht gesehen. Können Sie diesen Stil (zusammen mit Code, der zeigt, wie "undurchsichtig" zugewiesen und freigegeben wird) mit dem void * -basierten Stil vergleichen: http://robnapier.net/blog/wrapping-c-objc-20 –