|
@@ -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>
|