Вы можете определить свои собственные функции 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 ())
Некоторые замечания:
- Makeуверен, что вы компилируете файлы C с помощью компилятора c ++ (g ++ вместо gcc).это гарантирует, что библиотеки stdc ++ будут правильно подобраны.
- Передайте расположение библиотек (-L) и библиотек (-lboost *) для связи при компиляции программы / lib на стороне haskell