我正在研究如何在C ++中实现一个事件处理方案,因为它可以在java中实现一个类的adpter。问题是,使用下面显示的方法,我将需要已经实现了所有适配器,其功能覆盖了devived类(因为链接器需要它)。另一方面,考虑到需要实现的方式,使用委托策略,我可以在派生类中使用适配器,这意味着性能会降低。
哪一个,或者其他什么应该是最好的方法呢?
class KeyboardAdapter
{
public:
virtual void onKeyDown(int key) = 0;
}
class Controller : public KeyApadter
{
private:
void onKeyDown(int key);
}
void Controller::onKeyDown(int key) {}
class UserController : public Controller {
private:
void onKeyDown(int key);
}
void UserController::onKeyDown(int key) {
// do stuff
}
int main() {
UserController * uc = new UserController();
Controller * c = uc;
c->_onKeyDown(27);
}
答案 0 :(得分:1)
查看Boost.Signals库,了解如何在没有带虚函数的类(http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html)的情况下实现事件处理的示例。
答案 1 :(得分:0)
鉴于您的代码似乎正在处理来自用户的击键,并且假设没有人比每分钟100-150字更快地打字,我不会太担心效率。只是按照对你最有意义的方式去做。
答案 2 :(得分:0)
除了boost :: signals,您还可以尝试sigc++。它由C ++ GTK / Glib包装器GTKmm使用。它似乎符合您的需求。