Melhor abordagem para java como adaptadores de eventos de manipulação em C ++
-
12-09-2019 - |
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);
}
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.