我有一个返回vector<MyClass>
的函数;什么是将其改为适合FFI的最佳方式?
我认为像:: [CIntPointer]
这样的类型可能是一个很好的妥协,如果有可能的话。
答案 0 :(得分:3)
您可以定义自己的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 ())
一些问题: