#pragma once #include namespace sp { template class MessageBase { public: using HandlerType = THandler; using MessageIdType = TMessageID; MessageBase() {} virtual ~MessageBase() {} virtual MessageIdType GetId() const = 0; virtual void Dispatch(HandlerType& handler) const = 0; virtual void Read(std::istream& a_Is) = 0; virtual void Write(std::ostream& a_Os) const = 0; }; } // namespace sp