我知道这件事可行:

void myDisplay()
{
...
}
int main()
{
...
glutDisplayFunc(myDisplay)
...
}

所以我试图将myDisplay()函数包含到我制作的类中。因为我想在以后使用其他类来重载它。但是,编译器提示
argument of type 'void (ClassBlah::)()' does not match 'void(*)()' .
这是我尝试做的:
class ClassBlah
{
   ....
   void myDisplay()
   ....
}
......
int main()
{

    ...
    ClassBlah blah
    glutDisplayFunc(blah.myDisplay)
    ...
}

有人知道如何解决此问题吗?非常感谢。

最佳答案

首先,在非静态成员函数中有一个隐式“this”指针,因此您需要将void myDisplay()中的ClassBlah更改为静态。解决此限制很尴尬,这就是C++常见问题精简版说don't do it的原因

然后,您应该能够将函数作为ClassBlah::myDisplay传递。

根据重载的动机(即您是要在运行时还是仅在编译时进行热插拔实现?),您可以考虑使用实用程序“处理程序”静态类,该类包含指向基类的指针,并通过以下方式委托(delegate)责任:那。

10-05 23:04