像C ++中的适配器事件处理一样的Java的最佳方法

时间:2009-07-12 23:50:45

标签: c++ interface event-handling delegates adapter

我正在研究如何在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);
}

3 个答案:

答案 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使用。它似乎符合您的需求。