У меня есть функция, которая возвращает 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 ())
Некоторые ошибки:
do { a <- cpp_getVector(); forM a cpp_f }
гдеcpp_f :: ElementType -> IO ()
- person gatoatigrado   schedule 27.02.2012