我有这个结构(来自Teem库):
struct NrrdEncoding {
// ...
int (*read)(FILE *file, void *data, size_t elementNum,
Nrrd *nrrd, struct NrrdIoState_t *nio);
int (*write)(FILE *file, const void *data, size_t elementNum,
const Nrrd *nrrd, struct NrrdIoState_t *nio);
};
默认情况下,Swig希望read
和write
成为userdata,如果它们不透明且可重新分配,则有意义。但是,我希望能够调用这些,而不是我希望能够重新分配它们,我不知道如何。 (理想情况下,我希望能够做到这两点。)
答案 0 :(得分:2)
你需要通过SWIG给对象NrrdEncoding
成员函数(即:你作为对象成员绑定的C函数),它们自己将调用函数指针。它可以这样工作:
struct NrrdEncoding
{
...
//Don't expose the function pointers. The struct will still have them, but SWIG won't expose them.
};
%extend NrrdEncoding
{
int read(FILE *file, void *data, size_t elementNum, Nrrd *nrrd, struct NrrdIoState_t *nio)
{
return $self->read(file, data, elementNum, nrrd, nio);
}
int write(FILE *file, const void *data, size_t elementNum, const Nrrd *nrrd, struct NrrdIoState_t *nio)
{
return $self->write(file, data, elementNum, nrrd, nio);
}
}
在Lua中,如果您有NrrdEncoding
个对象,则可以像这样呼叫read
:object:read(...)
。