【问题标题】:How to use a non-argument variable in function?如何在函数中使用非参数变量?
【发布时间】:2018-10-26 18:34:57
【问题描述】:

Learning opengGL(+glfw) 我遇到了有趣的事情:我必须在glfwSetCursorPosCallback (Glfwwindow* , GLFWcursorposfun mouse_callback);中只使用一种函数原型mouse_callback我应该如何在我的mouse_callback中使用变量GLfloat yaw = -90.0f;而不将它传递为参数(会有错误)或全局变量。

【问题讨论】:

  • 自从我第一次在X11中看到回调,通常总是有一个客户端数据指针,它与函数指针一起注册并传递给回调。这可用于“绑定”客户端数据。不知何故,GLFW 的人们似乎忘记了这一点(或出于性能考虑而忽略了这一点)。要么将客户端数据存储在窗口中(如 LRiO 建议的那样),要么必须将它们存储在全局变量中。我没有其他办法。
  • 请同时发布代码。

标签: c++ c opengl glfw


【解决方案1】:

你不能。 C 函数指针不支持绑定参数。通常,您可以将指针传递给已包含 -90.0f 值的特定函数,或使用全局变量。

是的,这很糟糕。这就是 C++ 引入 std::bind,然后是 lambda 的原因。不幸的是,OpenGL API 不允许您使用此类功能。

但是,它确实允许您通过glfwSetWindowUserPointerglfwGetWindowUserPointer 将一些任意数据结构“绑定”到窗口上下文,因此您可以探索将您的值编码到该结构中。

【讨论】:

  • 只有在阅读了这个答案之后,我才明白问题是什么。也许downvote意味着“不要回答不清楚的问题”。只是猜测。
  • 谢谢,我确实像你说的功能,寻找更“优雅”的方式
猜你喜欢
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多