문제

나는 C ++에서 이벤트 처리 체계를 구현하는 방법에 대한 연구를하고 있으며, 이는 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);
}
도움이 되었습니까?

해결책

가상 함수가있는 클래스없이 이벤트 처리를 구현할 수있는 방법의 예를 보려면 Boost.Signals 라이브러리를 살펴보십시오.http://www.boost.org/doc/libs/1_39_0/doc/html/signals.html).

다른 팁

코드가 사용자의 키 스트로크를 처리하는 것으로 보이며 분당 100-150 단어보다 빠른 유형이 없다는 점을 감안할 때 효율성에 대해 너무 걱정하지 않을 것입니다. 당신에게 가장 의미가있는 방식으로 그렇게하십시오.

부스트 :: 신호 외에도 시도 할 수 있습니다 SIGC ++. C ++ GTK/GLIB 래퍼 GTKMM에 의해 사용됩니다. 그것은 당신의 요구에 맞는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top