enum class MessageType : char { Add = 'A', Modify = 'M', Delete = 'D', }; void on_message(const MessageHeader& hdr, const void* payload) { switch(hdr.type) { case MessageType.Add: return handleAdd(payload); case MessageType.Modify: return handleModify(payload); // no-default here to catch by at compile time new value in MessageType enumeration. } } void handleAdd(const void* payload); void handleModify(const void* payload);