C++ 将函数作为参数传递给方法
我想写一个初始化openGL的简单类。我决定创建方法C++ 将函数作为参数传递给方法,c++,opengl,C++,Opengl,我想写一个初始化openGL的简单类。我决定创建方法run,在这里初始化opengl、glutDisplayFunc和glutMainLoop。 我想将draw函数传递给此方法,并将其用作glutDisplayFunc void OpenGL::run(void(*drawFunction())) { this->init(); glutDisplayFunc(drawFunction); glutMainLoop(); }; 但是我有一个错误,void类型*(*
run
,在这里初始化opengl、glutDisplayFunc和glutMainLoop。
我想将draw函数传递给此方法,并将其用作glutDisplayFunc
void OpenGL::run(void(*drawFunction())) {
this->init();
glutDisplayFunc(drawFunction);
glutMainLoop();
};
但是我有一个错误,void类型*(*)()的参数与void类型(*)(
的参数不兼容
它不工作glutDisplayFunc(&drawFunction)代码>和glutDisplayFunc(*drawFunction)代码>任意一个。
有什么问题吗?您放错了右括号:
void OpenGL::run(void (*drawFunction)()) {
函数指针的行为和其他指针一样,只需按值传递它们。您已经正确地完成了:glutDisplayFunc(drawFunction)代码>
glutDisplayFunc
的文档还显示了回调的原型:您放错了右括号:
void OpenGL::run(void (*drawFunction)()) {
函数指针的行为和其他指针一样,只需按值传递它们。您已经正确地完成了:glutDisplayFunc(drawFunction)代码>
glutDisplayFunc
的文档还显示了回调的原型:typedef void(*callback_函数)(void);void OpenGL::run(callback_function param)Hust提示:GLUT不能很好地封装在类中。如果您真的想将一个类用于主应用程序结构,那么应该编写大量GLUT包装函数,将回调转发给主应用程序对象。然而,我强烈建议您过度考虑整个“应用程序类”方法。根据定义,给定程序中只能有一个应用程序实例。这意味着该应用程序类将始终作为(如果是)单例使用。然而,许多人认为单身是一种反模式——那么为什么要使用单身呢?typedef void(*callback_function)(void);void OpenGL::run(callback_function param)Hust提示:GLUT不能很好地封装在类中。如果您真的想将一个类用于主应用程序结构,那么应该编写大量GLUT包装函数,将回调转发给主应用程序对象。然而,我强烈建议您过度考虑整个“应用程序类”方法。根据定义,给定程序中只能有一个应用程序实例。这意味着该应用程序类将始终作为(如果是)单例使用。然而,单身人士被许多人视为反模式——那么为什么要使用他们呢?对于glutDisplayFunc
来说,它将是glutDisplayFunc(drawFunction)代码>或glutDisplayFunc(*drawFunction)代码>?glutDisplayFunc(绘图函数)
就像您在问题中所做的那样。如果您的drafunction是另一个成员,则在*之前添加_闭包,glutDisplayFunc
将是glutDisplayFunc(drawFunction)代码>或glutDisplayFunc(*drawFunction)代码>?glutDisplayFunc(绘图函数)代码>就像你在问题中所做的那样。如果你的函数是另一个成员,那么在之前添加闭包*