|
|
|
@ -346,6 +346,29 @@ struct InternalConstRef { |
|
|
|
|
typedef const base_type& type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<typename R, typename T> |
|
|
|
|
class MethodResultCallback_0_0 : public ResultCallback<R> { |
|
|
|
|
public: |
|
|
|
|
typedef R (T::*MethodType)(); |
|
|
|
|
MethodResultCallback_0_0(T* object, MethodType method, bool self_deleting) |
|
|
|
|
: object_(object), |
|
|
|
|
method_(method), |
|
|
|
|
self_deleting_(self_deleting) {} |
|
|
|
|
~MethodResultCallback_0_0() {} |
|
|
|
|
|
|
|
|
|
R Run() { |
|
|
|
|
bool needs_delete = self_deleting_; |
|
|
|
|
R result = (object_->*method_)(); |
|
|
|
|
if (needs_delete) delete this; |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
T* object_; |
|
|
|
|
MethodType method_; |
|
|
|
|
bool self_deleting_; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <typename R, typename T, typename P1, typename P2, typename P3, |
|
|
|
|
typename P4, typename P5, typename A1, typename A2> |
|
|
|
|
class MethodResultCallback_5_2 : public ResultCallback2<R, A1, A2> { |
|
|
|
@ -520,6 +543,13 @@ inline ResultCallback1<R, A1>* NewPermanentCallback( |
|
|
|
|
function, false, p1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// See MethodResultCallback_0_0
|
|
|
|
|
template <typename R, typename T1, typename T2> |
|
|
|
|
inline ResultCallback<R>* NewPermanentCallback( |
|
|
|
|
T1* object, R (T2::*function)()) { |
|
|
|
|
return new internal::MethodResultCallback_0_0<R, T1>(object, function, false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// See MethodResultCallback_5_2
|
|
|
|
|
template <typename R, typename T, typename P1, typename P2, typename P3, |
|
|
|
|
typename P4, typename P5, typename A1, typename A2> |
|
|
|
|