Pergunta

Estou fazendo algumas pesquisas em como implementar um esquema de manipulação de eventos em C ++ que pode ser easyest como a implementa uma Adpter a uma classe em java. O problema é que com a abordagem mostrada abaixo, vou precisar ter todos os adaptadores já implementadas com a sua função primordial na classe devived (porque o vinculador precisa dele). Por outro lado, usando uma estratégia delegado onde eu posso usar o adaptador apenas na classe derivada deve implicar em menos desempenho, considerando a forma como ela precisa ser implementada.

wich um, ou o que sobre o resto deve ser a melhor abordagem para ele?

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);
}
Foi útil?

Solução

Dê uma olhada na biblioteca Boost.Signals para um exemplo de como você pode implementar manipulação de eventos sem classes com funções virtuais ( http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html ).

Outras dicas

Tendo em conta que o seu código parece ser lidar com combinações de teclas do usuário, e dado que ninguém tipos mais rápido do que, digamos, 100-150 palavras por minuto, eu não me preocuparia muito com eficiência. Basta fazê-lo da maneira que faz mais sentido para você.

Além de boost :: sinais, você pode tentar SIGC ++ . É usado pelo ++ GTK C / Glib invólucro GTKmm. Parece para atender às suas necessidades.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top