Wenn ich in einer Situation bin, in der der Standardkonstruktor es nicht schneidet, mache ich die Instanzvariable zu einem Zeiger und verwende dann new
in der Methode init
und delete
in der Methode dealloc
.
Es ist eine relativ neue Sache, dass Standardkonstruktoren überhaupt für Objective-C-Instanzvariablen aufgerufen werden.
Es gibt keine Spezifikation der Objective-C-Sprache, geschweige denn eine Spezifikation der Objective-C ++ - Erweiterung. Apple veröffentlicht ein Dokument mit dem Namen The Objective-C Programmiersprache , aber es erwähnt kaum C ++, so dass Sie oft auf sich allein gestellt sind, wenn Sie etwas Unauffälliges klären müssen. Die Jungs im Clang Mailing-Liste aber oft besser wissen.
Wenn Sie eine stack-basierte C ++ - Klasse als Ivar Ihrer obj-c-Klasse benötigen, können Sie keine Argumente an den Konstruktor übergeben. Die Klasse wird als Teil der Zuweisung Ihres Objektobjekts erstellt. Sie könnten den Zuweisungsoperator in Ihrem -init
verwenden, oder Sie könnten Ihr eingebettetes Objekt auf andere Weise ändern (z. B. mithilfe von Elementfunktionen usw.).
Wenn die Klasse unbedingt mit Argumenten konstruiert werden muss, dann können Sie kein stackbasiertes Objekt verwenden und müssen es stattdessen auf dem Heap mit new
zuweisen (und dann mit delete
in Ihrem -dealloc
löschen) .
Nur zum Spaß - Ich habe eine Teillösung mit Vorlagen gefunden, aber ich bezweifle, dass Sie viel "echte" Kilometer damit bekommen werden ...
%Vor% Beachten Sie, dass der Template-Parameter int
ein Literal sein kann, aber der Template-Parameter const char[]
in einer Variablen mit externer Syntax deklariert werden muss. (nach clang )
Ich habe es nicht ausprobiert, aber zum Spaß. Ich werde das hier nur rüffeln:
Zuerst sieht das falsch aus:
%Vor%Sie suchen eine stack-basierte Klasse in der Schnittstelle einer Objektklasse.
Versuchen Sie
%Vor%Dann, solange Sie die CppClass in Ihre Datei eingefügt haben
Sie sollten, da obj C interagiert mit C und C ++ in der Lage sein zu können Erstellen Sie eine Instanz mit
%Vor%Ich würde nicht empfehlen, die C ++ - Klasse in die gleiche Datei zu setzen
In einem obj C-Projekt benötigen Sie eine .mm-Datei - nicht sicher, ob Deklarationen für CPP darin enthalten sind. Prolily nicht.
Sie benötigen also einen separaten Header und impl für Ihre C ++ - Klasse, wie Sie normalerweise dann einfach den CPP-Header und den Code CPP in Ihre obj-Klasse aufnehmen würden.
Ich könnte hier weit weg sein, habe es nicht versucht, aber obj C scheint anmutig in der Lage zu sein, C und C ++ zu nennen, solange Sie sich an die Regeln halten.
Tags und Links objective-c c++