gpt4 book ai didi

c++ - 如何让 glutTimerFunct 调用子类函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:48:50 25 4
gpt4 key购买 nike

所以我正在尝试制作一个项目,该项目反射(reflect)了 Ruby 的 Gosu gem,一个 2d 图形插件。为此,我创建了一个名为 Window 的类,它打算继承自 (class Game: public Window),然后定义了它的三个函数:Update() Controls ()Draw()

为了在我的窗口类中完成此操作,我定义了一个函数 Show(),如下所示

    void Window::Show(){
// stuff to initialize and set up my window and controls
glutTimerFunc(100,real_update,fps);
}

我的real_update 函数很简单

    void Window::real_update(int v){
glutPostRedisplay();
Update();
glutTimerFunc(1000/fps,real_update,v);
}

这里的逻辑是,无论什么类继承Window,都可以调用Show(),这将建立回调循环并初始化窗口,然后在 real_update 循环中,它将调用将在子类中定义的 Update

但是,当我创建一个简单的子类时,在子类中定义 Update 以指示它正在被调用,然后在子类的实例上调用 Show 它只会调用Update 的基类 (Window) 定义。

我确定这是对继承的误解,但我不明白为什么。我认为子类对 Show() 的调用会调用基类的定义,然后调用 Update,自从子类重新定义它以来,它已被更改。

最佳答案

这个问题的答案是在这个线程 Static Virtual functions in c++ 中找到的

从本质上讲,您想要类似虚拟的行为,但因为我想调用过剩函数,它必须是静态的,所以您模板化您的类,并让它调用模板类更新函数。

关于c++ - 如何让 glutTimerFunct 调用子类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24416419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com