13 #ifndef DtMessageMemberCall_H_
14 #define DtMessageMemberCall_H_
22 #include <boost/type_traits.hpp>
27 template <
typename T,
bool isPo
inter,
bool isDriver>
30 typedef typename boost::remove_const<typename boost::remove_reference<T>::type>::type
Result;
44 typedef typename boost::remove_pointer<typename boost::remove_const<T>::type>::type
TClass;
46 enum {
IsObject = boost::is_class<typename boost::remove_pointer<T>::type>::value};
53 template <
typename DesiredType>
111 de.DT_LOG_WARN << ex << std::endl;
115 de.DT_LOG_WARN <<
"Caught unknown exception" << std::endl;
128 #define DT_DEFINE_MESSAGE_MEMBER_CALL(argCount)\
129 template < class C, MAKE_LIST(typename T,argCount) >\
130 class DtMessageMemberCall##argCount : public DtMessageMemberCall<C>\
133 typedef void (C::*MemberFuncPtr)( MAKE_LIST(T,argCount) );\
134 DtMessageMemberCall##argCount(MemberFuncPtr m) \
138 virtual void call(DtDe& de, C* c,DtMessage& msg)\
140 MAKE_DECL_MULTILIST(typename CleanupType<T,>::Result a,argCount);\
141 msg >> MAKE_STREAMOUT(a,argCount);\
144 (c->*myFunc)(MAKE_CAST_CALL(Cast<T,>::toFunctionType,de,a,argCount));\
146 catch(DtException& ex)\
148 de.DT_LOG_WARN << ex << std::endl;\
152 de.DT_LOG_WARN << "Caught unknown exception" << std::endl;\
155 MemberFuncPtr myFunc;\
158 template <class C, MAKE_LIST(typename T,argCount) >\
159 DtMessageMemberCall<C>* bindMember(void (C::*m)( MAKE_LIST(T,argCount) ))\
161 return new DtMessageMemberCall##argCount<C, MAKE_LIST(T,argCount) >(m);\
176 #define DtMessageMemberCall_INL_
177 #include "DtMessageMemberCall.inl"
178 #undef DtMessageMemberCall_INL_