我有一个返回的函数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 ())
一些陷阱: