2009-07-12 7 views
0

Ich bin ein wenig Forschung, wie ein Ereignis-Handling-Schema in C++ zu implementieren, die am einfachsten sein kann, um einen Adapter zu einer Klasse in Java zu implementieren. Das Problem ist, dass ich mit dem unten gezeigten Ansatz alle Adapter implementiert haben muss, wobei die Funktion in der abgeleiteten Klasse Vorrang hat (weil der Linker sie benötigt). Auf der anderen Seite sollte die Verwendung einer Delegatenstrategie, bei der ich den Adapter nur in der abgeleiteten Klasse verwenden kann, weniger Leistung mit sich bringen, wenn man die Art und Weise betrachtet, wie sie implementiert werden muss.Der beste Ansatz für Java-ähnliche Adapter Event-Handling in C++

Welcher oder was sonst sollte der beste Ansatz dazu sein?

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); 
} 

Antwort

0

Da der Code erscheint Tastatureingaben vom Benutzer zu Handhabung, und da niemand Typen schneller als, sagen wir, 100 bis 150 pro Minute Worten, würde ich mich über die Effizienz nicht zu viele Sorgen. Tu es einfach so, wie es für dich am sinnvollsten ist.

+0

Sie sind richtig in Teil. Es sollte verwendet werden, um Benutzereingaben in einer Win32 OpenGL-App, Tastatur und Maus zu verarbeiten, und es muss so viel Zeit wie möglich gespart werden. –

0

Neben Boost :: Signale können Sie versuchen sigc++. Es wird vom C++ GTK/Glib Wrapper GTKmm verwendet. Es scheint Ihre Bedürfnisse zu erfüllen.

Verwandte Themen