从 Cython 中的 C 函数访问类/实例属性



我正在使用一个使用setCallback函数的c库。这些函数采用具有固定签名的函数,例如:

int glfwSetCursorPosCallback(window, mouse_move);

mouse_move签名的位置

void mouse_move(GLFWwindow * window, double xpos, double ypos)

但是假设mouse_move依赖于这些函数参数之外的其他状态,例如camera结构体?在 c 中,我只是将camera设为全局变量。但是,我正在Cython工作,我想在不求助于全局变量的情况下使用glfwSetCursorPosCallback,这些全局变量是非pythonic和混乱的。如果camera是一个类或实例属性,有没有办法从mouse_move内部访问它而不将其作为参数传入?

这不是一般问题的解决方案,但对于 glfw 回调,可以将void*与您的GLFWwindow相关联,如下所示:

glfwSetWindowUserPointer(window, yourVoidPtr);

并稍后访问它(例如在回调中(:

YourData *data = (YourData *) glfwGetWindowUserPointer(window);

最新更新