これは現在サポートされていません。スウィフトコードからC++コードに話のための唯一の2つのアプローチがあります。
すでに見られるように、Objective-Cの++を使用してにObjCのあなたのC++コードをラップします。
C++は主にCと互換性があり、SwiftはCを呼び出して、C++クラスの周りにCラッパーを作成し、Swiftから使用することができます。一般的なアプローチは次のようになります。
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);
}
あなたは、その後も、内型COpaquePointerのインスタンス変数を持つMyCppClassSwiftWrapper
を定義することができますC++オブジェクトを格納します。このクラスはコンストラクタでMyCppClass_new
をデストラクタのMyCppClass_delete
を呼び出し、パラメータとしてCOpaquePointerを使用するMyCppClass_setFirstParam
のラッパを含みます。
私はかつてC++ヘッダーをマークアップして自動的にCおよびSwiftラッパーを生成する(非常にプリミティブな)ユーティリティを作成しましたが(https://github.com/uliwitness/cpptoswift/)、テンプレートでは機能しません。型マッピングまた、まだC++オブジェクトのパッシング/リターンを正しく処理することもできません。
さらに良いことがあるhttps://github.com/sandym/swiftpp/もありますが、Objective-Cがラッパーのフードの下でまだ使用されていますが、少なくとも自分で書く必要はありません。
関連するhttp://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-c-mm-files –
[SwiftとC++を混在させることはできますか? Objective - C。mmファイルのように](http://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-c-mm-files) –