Вот хороший пример: я пытаюсь перегрузить OpenGL glutMouseFunc
, чтобы он мог принять пространство имен и функцию класса по своему выбору. В частности, это Init::DisplayInit::mouse
, который является статическим. Вопрос в том, возможно ли это? Если да, то как это достигается?
Моя реализация
void glutMouseFunc(void (Init::DisplayInit::*mouse)(int, int, int, int)) {
(*mouse);
}
Ошибки в реализации
..\OpenGL_03\/displayinit.h:27: error: variable or field 'glutMouseFunc' declared void
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: void value not ignored as it ought to be
Обратите внимание, я поместил объявление функции в заголовочный файл того же файла. Я также позаботился о том, чтобы объявление и определения функции находились вне объявления пространства имен (которое охватывает большинство обоих файлов, каждый). Как показано, одна из первых ошибок читает функцию как переменную или поле (???).