#pragma once #include namespace sp { template class MessageBase : public Message { protected: virtual void DispatchImpl(Handler& handler) override { handler.Handle(static_cast(*this)); } virtual void WriteImpl(DataBuffer& buffer) const = 0; virtual void ReadImpl(const DataBuffer& buffer) = 0; }; } // namespace sp