C++ 将函数作为参数传递给方法

C++ 将函数作为参数传递给方法,c++,opengl,C++,Opengl,我想写一个初始化openGL的简单类。我决定创建方法run,在这里初始化opengl、glutDisplayFunc和glutMainLoop。 我想将draw函数传递给此方法,并将其用作glutDisplayFunc void OpenGL::run(void(*drawFunction())) { this->init(); glutDisplayFunc(drawFunction); glutMainLoop(); }; 但是我有一个错误,void类型*(*

我想写一个初始化openGL的简单类。我决定创建方法
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(绘图函数)就像你在问题中所做的那样。如果你的函数是另一个成员,那么在之前添加闭包*