gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:36:49 26 4
gpt4 key购买 nike

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

基本上我有一个只有一个成员的事件处理程序对象。该成员是一个 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 方法,以便它可以有不同的实现。我知道基本的重载是如何工作的,它可以通过指定不同的参数来完成,但是有没有什么方法可以根据创建对象的文件对同一类方法进行不同的定义?

我希望有几个文件,每个文件都有自己的 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();
}

关于C++ 如何拥有相同方法的不同版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51179500/

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