2010-06-20 7 views
0

J'ai une grosse ligne de code que je veux empaqueter en définir pour une utilisation rapide.Définition des classes

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

est ici EventManager est classe singleton. Je préférerais passer en définir seulement EventManager :: KeyEvent type et le nom du signal "KeyPressed". Peux-tu m'aider avec ça?

Répondre

1

En raison du fait que je n'aime définit que je ferais une fonction "wrapper" comme ceci:

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

Edit: Un non testé définir pourrait ressembler à:

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

Edit2 : Je ne suis pas vraiment habitué à votre code, mais que serait-il plus lisible et débugable serait comme ça. (Rendez-vous compte, les noms de classe ne sont pas la vôtre, mais j'espère que vous pouvez voir ce que je veux dire)

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

oui préfèrent toujours en utilisant les fonctions inline sur définit (le code sera inline si elle est plus performante ou vous forcer inline) . '# define' répliquera toujours le code ce qui n'est pas une bonne idée et vous perdrez la plupart du temps le contrôle de type et aurez des problèmes avec des arguments répétés avec des effets secondaires qui pourraient créer des erreurs subtiles ... – jdehaan