2010-06-20 5 views
0

빠른 사용을 위해 정의 할 수있는 큰 코드 줄이 있습니다.클래스 정의

EventManager::get_mutable_instance().get<EventManager::KeyEvent>("KeyPressed").Call(EventManager::KeyEvent::ArgsType(localEvent.Key)); 

여기 개의 EventManager는 싱글 톤 클래스입니다. 나는 단지 EventManager :: KeyEvent 유형 및 신호 이름 "KeyPressed"을 정의하는 것으로 전달하는 것을 선호합니다. 이걸 좀 도와 주실 래요?

답변

1

사실 내가 정의를 좋아하지 않는다 인해 내가 만들 것과 같은 "래퍼"기능 :

public void call(EventType type, String whatToCall) { 
    EventManager::get_mutable_instance().get<type>(whatToCall).Call(EventManager::KeyEvent::ArgsType(localEvent.Key)); 
} 

편집 : 안된 모양을 수있는 정의 :

#define call(Type,Name) \ 
EventManager::get_mutable_instance().get<Type>(Name).Call(EventManager::KeyEvent::ArgsType(localEvent.Key)); 

Edit2가 : Im 코드에 익숙하지 않지만, 더 읽기 쉽고 디버깅이 가능한 것은 sth와 같습니다.

Event event = EventManager::get_mutable_instance().get<type>(whatToCall); 
ArgType argType = EventManager::KeyEvent::ArgsType(localEvent.Key); 
event.call(argType); 
+1

예 항상 (코드가 더 성능이 좋은 경우 인라인됩니다 또는 인라인을 강제로) 정의를 통해 인라인 함수를 사용하여 선호 (클래스 이름은 당신이 아니지만 난 당신이 무슨 뜻인지 볼 수 있기를 바랍니다,주의) . '#define'은 항상 좋은 아이디어가 아닌 코드를 복제 할 것입니다. 대부분의 경우 느슨한 유형 검사와 부작용이있는 반복 된 인수에 문제가있어 미묘한 오류가 발생할 수 있습니다 ... – jdehaan