【发布时间】:2018-07-04 18:48:14
【问题描述】:
如果我不知道我想要完成的事情的正确词,我很抱歉。
基本上我有一个事件处理程序对象,它只有一个成员。该成员是一个舞台对象。
当事件处理程序接收到一个事件时,我希望它简单地使用舞台对象来调用相关方法。例如:
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 方法来做不同的事情。
我确定有办法做我想做的事,只是我不知道该用什么词。
【问题讨论】:
-
您是在谈论“动态调度”、“泛型”和/或“模板函数”还是“函数覆盖”?这些是常见的面向对象技术。您可能想探索可以在这里使用的各种design patterns。
标签: c++ oop inheritance overloading abstract