首页 > 解决方案 > 在扩展已知类的未知类中调用函数

问题描述

正如标题所说,我有以下用户可以扩展的“基”类:

class BaseScene
{
private:
    bool sceneloop = false;

public:
    virtual void Start();
    virtual void EventHandler(SDL_Event event);
    virtual void Update();
    virtual void Draw();

    void _toggleLoopMode() { sceneloop = !sceneloop; }
    bool _sceneloop() { return sceneloop; }

};

我的问题是我不知道用户为他的类选择什么名称,那么我如何从未知类中的主类调用已知方法(如 Start 或 EventHandler)?

我不知道但用户知道的类的示例可以是:

class SomeFunnyRandomName : public BaseScene
{
public:
    void Start();
    void Eventhandler(SDL_Event event);
    void Update();
    void Draw();
};

因此,形成我需要在“SomeFunnyRandomName”中调用 Start() 的主类,而无需:

SomeFunnyRandomName sfrn = new SomeFunnyRandomName();

如果您可以包含代码,它将非常有帮助(但不是必需的)。

标签: c++

解决方案


您获取对 的引用或指针BaseScene,然后调用其上的方法。调用者传递其派生类的实例。

class UsesScene {
    BaseScene & scene;
public:
    UsesScene(BaseScene & scene) : scene(scene) {}

    void doStuff() { scene.Start(); scene.Update(); }
    /*... etc*/ 
};

int main() {
    SomeFunnyRandomName scene;
    UsesScene usesScene(scene);
    usesScene.doStuff();
}

推荐阅读