7
我有一個函數返回vector<MyClass>
;把這個變成適合FFI的最好方法是什麼?Haskell FFI:你如何包裝C++集合?
我在想,像:: [CIntPointer]
這樣的類型可能是一個很好的折中,如果可能的話可以獲得。
我有一個函數返回vector<MyClass>
;把這個變成適合FFI的最好方法是什麼?Haskell FFI:你如何包裝C++集合?
我在想,像:: [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())
的一些陷阱:
是的,這正是我正在做的......謝謝。 – gatoatigrado 2012-04-25 00:35:55
你需要修改的哈斯克爾側的各個元素編譯程序/ lib目錄時,鏈接嗎? – 2012-02-27 12:29:07
@JohnL,不,只需與他們調用函數,例如'do {a < - cpp_getVector(); forM a cpp_f}'哪裏'cpp_f :: ElementType - > IO()' – gatoatigrado 2012-02-27 19:39:27