回调函数中的 GLFW 传递了比预期更多的参数
GLFW in callback function pass more argument then intended
我在 C++ 中使用 GLFW 和他的回调函数。
我想在回调函数中实现的是修改我的 class Keyboard
.
类型的一个变量
回调函数的类型必须是void(* GLFWkeyfun) (GLFWwindow *, int, int, int, int)
glfwSetKeyCallback(GLFWwindow *window, GLFWkeyfun cbfun)
不允许我传递捕获 Keyboard
.
的 lambda 函数
它与模板函数一起工作,但它非常笨拙,因为 Keyboard
必须在编译时定义,并且不会使代码成为面向对象的。(即,如果我想制作一个new window 不像创建一个新实例那么容易)。
我尝试扩展 GLFWwindow
,这样我就可以使用多态性,这样我就可以将包含 Keyboard
的派生对象作为 glfwSetKeyCallback
的第一个参数,这样我可以从回调函数的第一个参数中得到相同的对象。但是当我扩展 GLFWwindow
我的 IDE 告诉我 "incomplete type is not allowed"
如何在回调中修改我的 Keyboard
?我真的希望我的设计尽可能模块化。
我应该多研究一下。
我可以将 Keyboard
放入 glfwSetWindowUserPointer
并使用 glfwGetWindowUserPointer
.
从回调中获取它
我在 C++ 中使用 GLFW 和他的回调函数。
我想在回调函数中实现的是修改我的 class Keyboard
.
回调函数的类型必须是void(* GLFWkeyfun) (GLFWwindow *, int, int, int, int)
glfwSetKeyCallback(GLFWwindow *window, GLFWkeyfun cbfun)
不允许我传递捕获 Keyboard
.
它与模板函数一起工作,但它非常笨拙,因为 Keyboard
必须在编译时定义,并且不会使代码成为面向对象的。(即,如果我想制作一个new window 不像创建一个新实例那么容易)。
我尝试扩展 GLFWwindow
,这样我就可以使用多态性,这样我就可以将包含 Keyboard
的派生对象作为 glfwSetKeyCallback
的第一个参数,这样我可以从回调函数的第一个参数中得到相同的对象。但是当我扩展 GLFWwindow
我的 IDE 告诉我 "incomplete type is not allowed"
如何在回调中修改我的 Keyboard
?我真的希望我的设计尽可能模块化。
我应该多研究一下。
我可以将 Keyboard
放入 glfwSetWindowUserPointer
并使用 glfwGetWindowUserPointer
.