Das wird derzeit nicht unterstützt. Es gibt nur zwei Ansätze für das Gespräch C++ Code aus Swift Code:
Wickeln Sie Ihren C++ Code in ObjC mit Objective-C++, wie Sie bereits gefunden.
Nutzen Sie die Tatsache, dass C++ meistens mit C kompatibel ist, und Swift kann C aufrufen und einen C-Wrapper um Ihre C++ - Klassen schreiben und diesen von Swift verwenden. Ein gemeinsamer Ansatz wäre:
cppwrapper.h
struct MyCppClass; // In C++ class and struct are the same, so this looks like a C struct to C, and as long as you don't look inside it, you can use pointers to it in C code.
extern "C" { // Tell C++ to turn off overloading based on type so it's C-compatible.
struct MyCppClass* MyCppClass_new(int firstParam);
void MyCppClass_delete(struct MyCppClass* inThis);
void MyCppClass_setFirstParam(struct MyCppClass* inThis, int firstParam);
} // extern "C"
cppwrapper.cpp
#include "cppwrapper.h"
#include "MyCppClass.hpp"
extern "C" MyCppClass* MyCppClass_new(int firstParam)
{
return new MyCppClass(firstParam);
}
extern "C" void MyCppClass_delete(MyCppClass* inThis)
{
delete inThis;
}
extern "C" void MyCppClass_setFirstParam(struct MyCppClass* inThis, int firstParam)
{
inThis->SetFirstParam(firstParam);
}
Sie könnten dann sogar ein MyCppClassSwiftWrapper
definieren, die eine Instanz-Variable vom Typ COpaquePointer hat, in denen Sie speichern das C++ - Objekt. Diese Klasse würde in ihrem Konstruktor MyCppClass_new
in ihrem Konstruktor MyCppClass_delete
aufrufen und würde einen Wrapper um MyCppClass_setFirstParam
enthalten, der den COpaquePointer als den inThis
Parameter in es verwendet.
Ich schrieb einmal ein (sehr primitives) Dienstprogramm, mit dem Sie C++ - Header markieren und einfache C- und Swift-Wrapper für sie automatisch generieren können (https://github.com/uliwitness/cpptoswift/), aber es funktioniert nicht mit Vorlagen und Sie müssen wahrscheinlich mehr hinzufügen type mappings zu ihm. Es behandelt auch noch nicht korrekt C++ - Objekte übergeben/zurückgeben.
Es gibt auch https://github.com/sandym/swiftpp/, die das alles besser macht, aber ich denke, es verwendet immer noch Objective-C unter der Haube für seine Wrapper, aber zumindest müssen Sie es nicht selbst schreiben.
In Verbindung stehende http://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-cmmfiles –
Mögliche Duplikate von [Kann ich Swift mit C++ mischen ? Wie das Objective - C .mm files] (http://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-cmmfiles) –