#include "../Messages.h" #include namespace AtlasMessage { // (Random note: Be careful not to give handler .cpp files the same name // as any other file in the project, because it makes everything very confused) typedef void (*msgHandler)(IMessage*); typedef std::map msgHandlers; extern msgHandlers& GetMsgHandlers(); #define CAT1(a,b) a##b #define CAT2(a,b) CAT1(a,b) #define REGISTER(t) namespace CAT2(hndlr_, __LINE__) { struct init { init() { \ bool notAlreadyRegisted = GetMsgHandlers().insert(std::pair(#t, &f##t)).second; \ assert(notAlreadyRegisted); \ } } init; }; }