を返す関数がありますvector<MyClass>
。これをFFIに適したものに変更する最良の方法は何ですか?
:: [CIntPointer]
可能であれば、次のようなタイプが良い妥協案になるかもしれないと考えています。
を返す関数がありますvector<MyClass>
。これをFFIに適したものに変更する最良の方法は何ですか?
:: [CIntPointer]
可能であれば、次のようなタイプが良い妥協案になるかもしれないと考えています。
独自の C 関数を定義して、割り当て、解放、挿入、削除などを行うことができます。これらの関数は、アクセスする C++ コンテナーをラップできます。例えば:
extern "C" {
Obj * obj_create()
{
return new Obj();
}
void obj_destroy(Obj * schema)
{
delete obj;
obj = NULL;
}
...
...
}
次に、それらを FFI で宣言し、好きな方法でラップします。
data SomeObject
type Obj = Ptr SomeObject
foreign import ccall unsafe "obj_create"
createObj :: IO Obj
foreign import ccall unsafe "obj_destroy"
destroyObj_ :: Obj -> IO ()
foreign import ccall unsafe "&obj_destroy"
destroyObj :: FunPtr (Obj -> IO ())
いくつかの落とし穴: