【问题标题】:Best aproach to java like adapters event-handling in C++像 C++ 中的适配器事件处理这样的 java 的最佳方法
【发布时间】:2009-07-12 23:50:44
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你是对的。它应该用于在 win32 opengl 应用程序、键盘和鼠标中处理用户输入,并且它需要尽可能多地节省时间。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-23
        • 2013-04-17
        相关资源
        最近更新 更多