0

我正在研究如何在 C++ 中实现一个事件处理方案,这可能是最简单的,因为它可以在 java 中实现一个类的适配器。问题是,使用下面显示的方法,我需要已经实现了所有适配器,并在 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);
}
4

3 回答 3

1

查看 Boost.Signals 库的示例,了解如何在没有具有虚函数的类的情况下实现事件处理 ( http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html )。

于 2009-07-13T02:01:25.087 回答
0

鉴于您的代码似乎正在处理来自用户的击键,并且鉴于没有人打字的速度超过每分钟 100-150 个字,我不会太担心效率。只需按照对您最有意义的方式进行即可。

于 2009-07-13T01:56:24.673 回答
0

除了 boost::signals,您还可以尝试sigc++。它被 C++ GTK/Glib 包装器 GTKmm 使用。它似乎符合您的需求。

于 2009-07-13T10:05:17.223 回答