C++ 如何让GLUTIMERFUNCT调用子类函数
因此,我正在尝试制作一个项目,以反映Ruby的GosuGem,一个2d图形插件。为此,我创建了一个名为Window的类,该类将从Game:public Window类继承,然后定义了它的三个函数:更新控件和绘制 为了在我的窗口类中实现这一点,我定义了一个函数Show,如下所示C++ 如何让GLUTIMERFUNCT调用子类函数,c++,opengl,inheritance,C++,Opengl,Inheritance,因此,我正在尝试制作一个项目,以反映Ruby的GosuGem,一个2d图形插件。为此,我创建了一个名为Window的类,该类将从Game:public Window类继承,然后定义了它的三个函数:更新控件和绘制 为了在我的窗口类中实现这一点,我定义了一个函数Show,如下所示 void Window::Show(){ // stuff to initialize and set up my window and controls glutT
void Window::Show(){
// stuff to initialize and set up my window and controls
glutTimerFunc(100,real_update,fps);
}
我真正的更新函数是
void Window::real_update(int v){
glutPostRedisplay();
Update();
glutTimerFunc(1000/fps,real_update,v);
}
这里的逻辑是,任何继承Window的类都能够调用Show,它将设置回调循环并初始化窗口,然后在real_update循环中,它将调用将在子类中定义的更新
但是,当我创建一个简单的子类时,在子类中定义Update以指示正在调用它,然后在子类的实例上调用Show,它将只调用基类的窗口定义进行更新
我肯定这是对继承的误解,但我不明白为什么。我认为Show的子类调用将调用基类的定义,然后基类的定义将调用Update,自从子类重新定义它以来,Update已被更改 这个问题的答案在这个帖子中找到了
本质上,您希望有类似虚拟的行为,但因为我想调用glut函数,所以它必须是静态的,所以您可以对类进行模板化,并让它调用模板类更新函数。什么是类声明?我的类声明是类窗口和类游戏:公共窗口。这就是为什么我希望更新包含在游戏中编写的代码,函数real_Update将由游戏继承,并在使用int-glutTimerFunct时调用Update。