7
나는 vector<MyClass>
을 반환하는 함수를 가지고 있습니다. 이것을 FFI에 적합한 것으로 바꾸는 가장 좋은 방법은 무엇입니까?하스켈 FFI : C++ 모음을 어떻게 포장합니까?
:: [CIntPointer]
과 같은 유형은 가능한 경우 얻을 수있는 좋은 타협이 될 수도 있습니다.
나는 vector<MyClass>
을 반환하는 함수를 가지고 있습니다. 이것을 FFI에 적합한 것으로 바꾸는 가장 좋은 방법은 무엇입니까?하스켈 FFI : C++ 모음을 어떻게 포장합니까?
:: [CIntPointer]
과 같은 유형은 가능한 경우 얻을 수있는 좋은 타협이 될 수도 있습니다.
alloc, free, insert, remove 등과 같은 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
당신이 하스켈 측의 개별 요소를 수정해야합니까 하스켈 측의 프로그램/lib 디렉토리를 컴파일 할 때의 링크를? –
@ JohnL, 아니요, 그냥 함수를 호출하십시오. 'do {a <- cpp_getVector(); forM a cpp_f}'cpp_f :: ElementType -> IO()' – gatoatigrado