Question

Je fais des recherches sur la façon de mettre en œuvre un système de gestion des événements en C ++ qui peut être easyest comme pour une œuvre adpter à une classe en java. Le problème est que l'approche indiquée ci-dessous, je besoin d'avoir toutes les cartes déjà mis en œuvre avec sa fonction remplaçant dans la classe devived (parce que l'éditeur de liens dont il a besoin). De l'autre côté, en utilisant une stratégie de délégué où je peux utiliser l'adaptateur juste dans la classe dérivée devrait impliquer en moins la performance compte tenu de la façon dont il a besoin d'être mis en œuvre.

wich un, ou ce que le reste devrait être la meilleure approche pour elle?

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);
}
Était-ce utile?

La solution

Jetez un oeil à la bibliothèque Boost.Signals pour un exemple de la façon dont vous pouvez mettre en œuvre la gestion des événements sans classes avec des fonctions virtuelles ( http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html ).

Autres conseils

Étant donné que votre code semble manipuler les frappes de l'utilisateur, et étant donné que les types de personne ne plus rapide que, disons, 100-150 mots par minute, je ne vous inquiétez pas trop sur l'efficacité. Il suffit de le faire de la manière qui fait de vous le plus de sens.

En plus de boost :: signaux, vous pouvez essayer sigc ++ . Il est utilisé par le C ++ wrapper GTK / Glib GTKmm. Il semble répondre à vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top