0

Javaのクラスにアダプターを実装するのが最も簡単なC++でイベント処理スキームを実装する方法についていくつかの研究を行っています。問題は、以下に示すアプローチでは、派生したクラスで関数をオーバーライドしてすべてのアダプターを既に実装しておく必要があることです (リンカーがそれを必要とするため)。一方、派生クラスでのみアダプターを使用できるデリゲート戦略を使用すると、実装方法を考慮するとパフォーマンスが低下するはずです。

どれ、または他に何が最善のアプローチであるべきですか?

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

仮想関数 ( http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html )を使用してクラスなしでイベント処理を実装する方法の例については、Boost.Signals ライブラリをご覧ください。

于 2009-07-13T02:01:25.087 に答える
0

コードがユーザーからのキーストロークを処理しているように見え、たとえば1分あたり100〜150語より速く入力する人がいないことを考えると、効率についてはあまり心配しません。あなたにとって最も理にかなっている方法でそれをしてください。

于 2009-07-13T01:56:24.673 に答える
0

boost::signals の他に、sigc++を試すことができます。C++ GTK/Glib ラッパー GTKmm で使用されます。それはあなたのニーズに合っているようです。

于 2009-07-13T10:05:17.223 に答える