diff options
Diffstat (limited to 'ipc/ipc_message_utils.h')
-rw-r--r-- | ipc/ipc_message_utils.h | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h index f337814..5ec80a7 100644 --- a/ipc/ipc_message_utils.h +++ b/ipc/ipc_message_utils.h @@ -100,22 +100,31 @@ class MessageIterator { //----------------------------------------------------------------------------- // ParamTraits specializations, etc. -template <class P> struct ParamTraits {}; +template <class P> struct ParamTraits { +}; + +template <class P> +struct SimilarTypeTraits { + typedef P Type; +}; template <class P> static inline void WriteParam(Message* m, const P& p) { - ParamTraits<P>::Write(m, p); + typedef typename SimilarTypeTraits<P>::Type Type; + ParamTraits<Type>::Write(m, static_cast<const Type& >(p)); } template <class P> static inline bool WARN_UNUSED_RESULT ReadParam(const Message* m, void** iter, P* p) { - return ParamTraits<P>::Read(m, iter, p); + typedef typename SimilarTypeTraits<P>::Type Type; + return ParamTraits<Type>::Read(m, iter, reinterpret_cast<Type* >(p)); } template <class P> static inline void LogParam(const P& p, std::wstring* l) { - ParamTraits<P>::Log(p, l); + typedef typename SimilarTypeTraits<P>::Type Type; + ParamTraits<Type>::Log(static_cast<const Type& >(p), l); } template <> @@ -788,7 +797,6 @@ struct ParamTraits<LogData> { } }; - template <> struct ParamTraits<Message> { static void Write(Message* m, const Message& p) { |