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();
}
如果我不知道我想要完成的事情的正确词,我很抱歉。
基本上我有一个只有一个成员的事件处理程序对象。该成员是一个 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();
}