C++ 如何拥有相同方法的不同版本?

C++ how to have seperate versions of the same method?

如果我不知道我想要完成的事情的正确词,我很抱歉。

基本上我有一个只有一个成员的事件处理程序对象。该成员是一个 Stage 对象。

当事件处理程序接收到事件时,我希望它简单地使用阶段对象来调用相关方法。例如:

Event event; //this event is not part of my code, but rather the library I'm using.

Stage s;                    // my custom class object

EventHandler event_handler; //also my custom class object
event_handler.stage = &s;

if(event == SHUTDOWN) {
    event_handler.stage->handle_shutdown();
}

所以我想要完成的是,随着时间的推移,我的程序将进入不同的范围,我希望每个范围都可以访问 event_handler,这样他们就可以做一些事情喜欢:

void some_other_scope(EventHandler* eh) {
    Stage* some_new_stage = new Stage(...);
    eh->stage = some_new_stage;
}

这样,原始事件代码保持不变,事件处理程序将在与最初调用的对象不同的对象上调用 handle_shutdown。

所以我想做的是重载 handle_shutdown 方法,以便它可以有不同的实现。我知道基本的重载是如何工作的,它可以通过指定不同的参数来完成,但是有什么方法可以根据创建对象的文件对相同的 class 方法进行不同的定义?

我希望有几个文件,每个文件都有自己的 some_other_scope() 函数,每个文件都可以重新定义 handle_shutdown 方法来根据文件的需要做不同的事情。

我确定有一种方法可以做我想做的事,我只是不知道该用什么词。

看来你想使用多态性:

class IStage
{
public:
    virtual ~IStage() = default;
    virtual void handle_shutdown() = 0;
    // ...
};

class Stage1 : public IStage
{
public:
    void handle_shutdown() override { /*Implementation1*/ }
    // ...
};

class Stage2 : public IStage
{
public:
    void handle_shutdown() override { /*Implementation1*/ }
    // ...
};

然后

struct EventHandler
{
    std::unique_ptr<IStage> stage;
    // ...
};

EventHandler event_handler;
event_handler.stage = std::make_unique<Stage1>();

if (event == SHUTDOWN) {
    event_handler.stage->handle_shutdown();
}

// Later
event_handler.stage = std::make_unique<Stage2>();

if (event == SHUTDOWN) {
    event_handler.stage->handle_shutdown();
}