这是一个很好的例子:我正在尝试重载 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
注意,我把函数的声明放在同一个文件的头文件中。我还确保函数的声明和定义都驻留在命名空间声明之外(它包装了两个文件的大部分)。如图所示,第一个错误将函数读取为变量或字段 (???)。