私はC++ライブラリ(bullet physics)を組み込んだ素早いプロジェクトに取り組んでいます。現在、Objective-CでC++ライブラリをラップし、SwiftのObjective-Cコードをブリッジヘッダー経由で使用してこれを実現しています。C++オブジェクトへの参照ポインタを迅速に?
私はObjective-Cラッパーを排除し、コードをプラットフォームに依存しないようにするために、純粋なCインターフェイス経由でBulletにアクセスしたいと考えています。
概念的には、extern "C"
を使用してC++コード用のCインターフェイスを作成する方法を理解していますが、Swift Codeで使用可能なC++ライブラリの型を作成する方法がわかりません。
// BulletCInterface.h
#ifdef __cplusplus
extern "C" {
#endif
btRigidBody* createRigidBody();
#ifdef __cplusplus
}
#endif
そして、C++実装ファイル:
//BulletCInterface.cpp
#import <BulletDynamics/btBulletCollisionCommon.h>
#import <BulletDynamics/btBulletDynamicsCommon.h>
#ifdef __cplusplus
extern "C" {
#endif
btRigidBody* createRigidBody() {
//invoke the C++ bullet API to produce a btRigid body
//...
}
#ifdef __cplusplus
}
#endif
Cヘッダファイルで
// MyPhysicsObject.swift
class MyPhysicsObject {
let rigidBody: btRigidBody
init() {
self.rigidBody = createRigidBody() //called from C interface
}
}
:
たとえば、私はこのような何かをできるようにしたいと思います
しかし、これを試みると、コンパイラはのbtRigidBody
が未定義の型であると不平を言う。最低限、これらのオブジェクトへの参照を迅速に保持できるようにしたいと考えています。最高でデータメンバ(大量など)にアクセスできるようにしたいと思います。
これらのC++型を私のスウィフトコード?または、私はすべてをvoid*
にして、自分自身のタイプを記録しなければならないのですか?