回调函数中的 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.

从回调中获取它