提问人:Ciborg 提问时间:6/29/2023 最后编辑:Ciborg 更新时间:6/29/2023 访问量:44
是否使用 std::function 创建回调(支持 lambda 和捕获)?
Use std::function for creating callbacks(with support of lambda with capture) or not?
问:
我现在正在编写使用 glfw 创建窗口的输入处理,并坚持使用回调功能。尝试将其包装在我自己的 Window 类中,但是要通过捕获处理 labmda 需要使用 std::function,(我不确定这是好方法?
//example of solution
class MyWindow
{
public:
void SetInputCallback(MyInputCallback callback);
private:
static void inputCallback(GLFWwindow* Window, int32 key, int32 scancode, int32 action, int32 mods);
GLFWwindow* window;
MyInputCallback CallbackFunc = nullptr;
}
// cpp
void MyWindow::inputCallback(GLFWwindow* Window, int32 key, int32 scancode, int32 action, int32 mods){
if(CallbackFunc)
CallbackFunc(Window,key,scancode,action,mods);
}
void MyWindow::SetInputCallback(MyInputCallback callback)
{
InputCallbackFunction = callback;
glfwSetKeyCallback(window, inputCallback);
};
想知道 std::function 是否好(或者足够好?)或者最好使用模板/简单的 typedef 和一些代码(但它不支持带捕获的 lamda,也不会明确说明我的窗口想要作为回调获得什么)
答: 暂无答案
评论