Лучший подход к java-подобным адаптерам для обработки событий в C ++ - PullRequest
0 голосов
/ 13 июля 2009

Я провожу некоторые исследования о том, как реализовать схему обработки событий в C ++, которая может быть проще всего, так как она реализует adpter для класса в 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);
}

Ответы [ 3 ]

1 голос
/ 13 июля 2009

Посмотрите в библиотеке Boost.Signals пример того, как можно реализовать обработку событий без классов с виртуальными функциями (http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html).

0 голосов
/ 13 июля 2009

Помимо boost :: сигналов, вы можете попробовать sigc ++ . Используется оболочкой C ++ GTK / Glib GTKmm. Похоже, соответствует вашим потребностям.

0 голосов
/ 13 июля 2009

Учитывая, что ваш код, кажется, обрабатывает нажатия клавиш пользователем, и учитывая, что никто не печатает быстрее, скажем, 100-150 слов в минуту, я бы не стал слишком беспокоиться об эффективности. Просто сделайте это так, как вам кажется.

...