Я хочу написать простой класс, который инициализирует openGL. Я решил создать метод run
, где я инициализирую opengl, glutDisplayFunc, glutMainLoop. Я хочу передать начертить функцию к этому методу и использовать его в качестве параметра для glutDisplayFunc
Функция pass как параметр к методу
void OpenGL::run(void(*drawFunction())) {
this->init();
glutDisplayFunc(drawFunction);
glutMainLoop();
};
Но я получил ошибку argument of void type *(*)() is incompatible with parameter of type void (*)()
.
Не работает glutDisplayFunc(&drawFunction);
и glutDisplayFunc(*drawFunction);
. В чем проблема?
ЬурейеЕ ничтожной (* callback_function) (ничтожной); void OpenGL :: run (callback_function param) – LukeCodeBaker
Хуст подсказка: GLUT не работает с тем, чтобы быть инкапсулированным в классы. Если вы действительно хотите использовать класс для своей основной структуры приложения, вы должны написать несколько функций оболочки GLUT, которые пересылают обратные вызовы в основной объект приложения. Однако я настоятельно рекомендую вам пересмотреть подход «класс приложения». По определению в данной программе может быть только один экземпляр приложения. Это означает, что этот класс приложения всегда будет использоваться как (если это было) singleton. Синглтоны, однако, считаются анти-шаблонами для многих людей http://goo.gl/zU43IF - так зачем их использовать? – datenwolf