Haskell FFI:你如何包装C ++集合?
我有一个函数返回vector<MyClass>
; 把这个变成适合FFI的最好方法是什么?
我:: [CIntPointer]
一个类型:: [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 ())
一些问题: