回调函数中的 GLFW 传递了更多的参数,然后是预期的

GLFW in callback function pass more argument then intended

本文关键字:参数 然后 函数 GLFW 回调      更新时间:2023-10-16

我在C++中使用GLFW和他的回调函数。我想在回调函数中实现的是修改我的类Keyboard类型的变量。

回调函数的类型必须是 void(* GLFWkeyfun) (GLFWwindow *, int, int, int, int)

glfwSetKeyCallback(GLFWwindow *window, GLFWkeyfun cbfun)不允许我传递捕获Keyboard的 lambda 函数。

它适用于模板化函数,但它非常笨拙,因为Keyboard必须在编译时定义,并且不会使代码面向对象。(即,如果我想创建一个新窗口并不像创建一个新实例那么容易(。

我试图扩展GLFWwindow以便我可以使用多态性,以便我可以放置一个包含Keyboard的导数对象作为glfwSetKeyCallback的第一个参数,以便我可以从回调函数的第一个参数中获取相同的对象。但是当我扩展GLFWwindow我的 IDE 告诉我"不允许不完整的类型">

如何从回调中修改我的Keyboard?我真的希望我的设计尽可能模块化。

我应该多研究一下。我可以将Keyboard放在glfwSetWindowUserPointer中,并使用glfwGetWindowUserPointer从回调中获取它。

相关文章: