Rufen Sie einen C ++ - Konstruktor aus einer Objective C-Klasse auf

8

Wie kann ich einen C ++ - Konstruktor innerhalb einer Objective C-Klasse aufrufen?

%Vor%     
syvex 17.09.2012, 21:27
quelle

4 Antworten

6

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.

    
zneak 17.09.2012, 21:29
quelle
5

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) .

    
Kevin Ballard 17.09.2012 21:38
quelle
1

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 )

    
nielsbot 17.09.2012 22:32
quelle
-1

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.

    
deleted_user 17.09.2012 21:36
quelle

Tags und Links