Index: webrtc/base/bind.h |
diff --git a/webrtc/base/bind.h b/webrtc/base/bind.h |
index e8c1ab5e915d4936ead727ed4558a65f3ce2e9eb..397a4d5c876608a07ecc5584c2f7f06d42250304 100644 |
--- a/webrtc/base/bind.h |
+++ b/webrtc/base/bind.h |
@@ -1,7 +1,3 @@ |
-// This file was GENERATED by command: |
-// pump.py bind.h.pump |
-// DO NOT EDIT BY HAND!!! |
- |
/* |
* Copyright 2012 The WebRTC Project Authors. All rights reserved. |
* |
@@ -12,9 +8,6 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
-// To generate bind.h from bind.h.pump, execute: |
-// /home/build/google3/third_party/gtest/scripts/pump.py bind.h.pump |
- |
// Bind() is an overloaded function that converts method calls into function |
// objects (aka functors). The method object is captured as a scoped_refptr<> if |
// possible, and as a raw pointer otherwise. Any arguments to the method are |
@@ -64,6 +57,9 @@ |
#ifndef WEBRTC_BASE_BIND_H_ |
#define WEBRTC_BASE_BIND_H_ |
+#include <tuple> |
+#include <type_traits> |
+ |
#include "webrtc/base/scoped_ref_ptr.h" |
#include "webrtc/base/template_util.h" |
@@ -131,1406 +127,94 @@ struct PointerType { |
} // namespace detail |
-template <class ObjectT, class MethodT, class R> |
-class MethodFunctor0 { |
- public: |
- MethodFunctor0(MethodT method, ObjectT* object) |
- : method_(method), object_(object) {} |
- R operator()() const { |
- return (object_->*method_)(); } |
- private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
-}; |
- |
-template <class FunctorT, class R> |
-class Functor0 { |
- public: |
- explicit Functor0(const FunctorT& functor) |
- : functor_(functor) {} |
- R operator()() const { |
- return functor_(); } |
- private: |
- FunctorT functor_; |
-}; |
- |
- |
-#define FP_T(x) R (ObjectT::*x)() |
- |
-template <class ObjectT, class R> |
-MethodFunctor0<ObjectT, FP_T(NONAME), R> |
-Bind(FP_T(method), ObjectT* object) { |
- return MethodFunctor0<ObjectT, FP_T(NONAME), R>( |
- method, object); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)() const |
- |
-template <class ObjectT, class R> |
-MethodFunctor0<const ObjectT, FP_T(NONAME), R> |
-Bind(FP_T(method), const ObjectT* object) { |
- return MethodFunctor0<const ObjectT, FP_T(NONAME), R>( |
- method, object); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)() |
- |
-template <class ObjectT, class R> |
-MethodFunctor0<ObjectT, FP_T(NONAME), R> |
-Bind(FP_T(method), const scoped_refptr<ObjectT>& object) { |
- return MethodFunctor0<ObjectT, FP_T(NONAME), R>( |
- method, object.get()); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)() |
- |
-template <class R> |
-Functor0<FP_T(NONAME), R> |
-Bind(FP_T(function)) { |
- return Functor0<FP_T(NONAME), R>( |
- function); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, class MethodT, class R, |
- class P1> |
-class MethodFunctor1 { |
- public: |
- MethodFunctor1(MethodT method, ObjectT* object, |
- P1 p1) |
- : method_(method), object_(object), |
- p1_(p1) {} |
- R operator()() const { |
- return (object_->*method_)(p1_); } |
- private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
-}; |
- |
-template <class FunctorT, class R, |
- class P1> |
-class Functor1 { |
- public: |
- Functor1(const FunctorT& functor, P1 p1) |
- : functor_(functor), |
- p1_(p1) {} |
- R operator()() const { |
- return functor_(p1_); } |
- private: |
- FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
-}; |
- |
- |
-#define FP_T(x) R (ObjectT::*x)(P1) |
- |
-template <class ObjectT, class R, |
- class P1> |
-MethodFunctor1<ObjectT, FP_T(NONAME), R, P1> |
-Bind(FP_T(method), ObjectT* object, |
- typename detail::identity<P1>::type p1) { |
- return MethodFunctor1<ObjectT, FP_T(NONAME), R, P1>( |
- method, object, p1); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1) const |
- |
-template <class ObjectT, class R, |
- class P1> |
-MethodFunctor1<const ObjectT, FP_T(NONAME), R, P1> |
-Bind(FP_T(method), const ObjectT* object, |
- typename detail::identity<P1>::type p1) { |
- return MethodFunctor1<const ObjectT, FP_T(NONAME), R, P1>( |
- method, object, p1); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1) |
- |
-template <class ObjectT, class R, |
- class P1> |
-MethodFunctor1<ObjectT, FP_T(NONAME), R, P1> |
-Bind(FP_T(method), const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1) { |
- return MethodFunctor1<ObjectT, FP_T(NONAME), R, P1>( |
- method, object.get(), p1); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)(P1) |
- |
-template <class R, |
- class P1> |
-Functor1<FP_T(NONAME), R, P1> |
-Bind(FP_T(function), |
- typename detail::identity<P1>::type p1) { |
- return Functor1<FP_T(NONAME), R, P1>( |
- function, p1); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, class MethodT, class R, |
- class P1, |
- class P2> |
-class MethodFunctor2 { |
- public: |
- MethodFunctor2(MethodT method, ObjectT* object, |
- P1 p1, |
- P2 p2) |
- : method_(method), object_(object), |
- p1_(p1), |
- p2_(p2) {} |
- R operator()() const { |
- return (object_->*method_)(p1_, p2_); } |
- private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
-}; |
- |
-template <class FunctorT, class R, |
- class P1, |
- class P2> |
-class Functor2 { |
- public: |
- Functor2(const FunctorT& functor, P1 p1, P2 p2) |
- : functor_(functor), |
- p1_(p1), |
- p2_(p2) {} |
- R operator()() const { |
- return functor_(p1_, p2_); } |
- private: |
- FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
-}; |
- |
- |
-#define FP_T(x) R (ObjectT::*x)(P1, P2) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2> |
-MethodFunctor2<ObjectT, FP_T(NONAME), R, P1, P2> |
-Bind(FP_T(method), ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2) { |
- return MethodFunctor2<ObjectT, FP_T(NONAME), R, P1, P2>( |
- method, object, p1, p2); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2) const |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2> |
-MethodFunctor2<const ObjectT, FP_T(NONAME), R, P1, P2> |
-Bind(FP_T(method), const ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2) { |
- return MethodFunctor2<const ObjectT, FP_T(NONAME), R, P1, P2>( |
- method, object, p1, p2); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2> |
-MethodFunctor2<ObjectT, FP_T(NONAME), R, P1, P2> |
-Bind(FP_T(method), const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2) { |
- return MethodFunctor2<ObjectT, FP_T(NONAME), R, P1, P2>( |
- method, object.get(), p1, p2); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)(P1, P2) |
- |
-template <class R, |
- class P1, |
- class P2> |
-Functor2<FP_T(NONAME), R, P1, P2> |
-Bind(FP_T(function), |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2) { |
- return Functor2<FP_T(NONAME), R, P1, P2>( |
- function, p1, p2); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, class MethodT, class R, |
- class P1, |
- class P2, |
- class P3> |
-class MethodFunctor3 { |
- public: |
- MethodFunctor3(MethodT method, ObjectT* object, |
- P1 p1, |
- P2 p2, |
- P3 p3) |
- : method_(method), object_(object), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3) {} |
- R operator()() const { |
- return (object_->*method_)(p1_, p2_, p3_); } |
- private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
-}; |
- |
-template <class FunctorT, class R, |
- class P1, |
- class P2, |
- class P3> |
-class Functor3 { |
- public: |
- Functor3(const FunctorT& functor, P1 p1, P2 p2, P3 p3) |
- : functor_(functor), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3) {} |
- R operator()() const { |
- return functor_(p1_, p2_, p3_); } |
- private: |
- FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
-}; |
- |
- |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3> |
-MethodFunctor3<ObjectT, FP_T(NONAME), R, P1, P2, P3> |
-Bind(FP_T(method), ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3) { |
- return MethodFunctor3<ObjectT, FP_T(NONAME), R, P1, P2, P3>( |
- method, object, p1, p2, p3); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3) const |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3> |
-MethodFunctor3<const ObjectT, FP_T(NONAME), R, P1, P2, P3> |
-Bind(FP_T(method), const ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3) { |
- return MethodFunctor3<const ObjectT, FP_T(NONAME), R, P1, P2, P3>( |
- method, object, p1, p2, p3); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3> |
-MethodFunctor3<ObjectT, FP_T(NONAME), R, P1, P2, P3> |
-Bind(FP_T(method), const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3) { |
- return MethodFunctor3<ObjectT, FP_T(NONAME), R, P1, P2, P3>( |
- method, object.get(), p1, p2, p3); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)(P1, P2, P3) |
- |
-template <class R, |
- class P1, |
- class P2, |
- class P3> |
-Functor3<FP_T(NONAME), R, P1, P2, P3> |
-Bind(FP_T(function), |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3) { |
- return Functor3<FP_T(NONAME), R, P1, P2, P3>( |
- function, p1, p2, p3); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, class MethodT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4> |
-class MethodFunctor4 { |
- public: |
- MethodFunctor4(MethodT method, ObjectT* object, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4) |
- : method_(method), object_(object), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4) {} |
- R operator()() const { |
- return (object_->*method_)(p1_, p2_, p3_, p4_); } |
- private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
-}; |
- |
-template <class FunctorT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4> |
-class Functor4 { |
- public: |
- Functor4(const FunctorT& functor, P1 p1, P2 p2, P3 p3, P4 p4) |
- : functor_(functor), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4) {} |
- R operator()() const { |
- return functor_(p1_, p2_, p3_, p4_); } |
- private: |
- FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
-}; |
- |
- |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4> |
-MethodFunctor4<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4> |
-Bind(FP_T(method), ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4) { |
- return MethodFunctor4<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>( |
- method, object, p1, p2, p3, p4); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4) const |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4> |
-MethodFunctor4<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4> |
-Bind(FP_T(method), const ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4) { |
- return MethodFunctor4<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>( |
- method, object, p1, p2, p3, p4); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4> |
-MethodFunctor4<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4> |
-Bind(FP_T(method), const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4) { |
- return MethodFunctor4<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>( |
- method, object.get(), p1, p2, p3, p4); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)(P1, P2, P3, P4) |
- |
-template <class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4> |
-Functor4<FP_T(NONAME), R, P1, P2, P3, P4> |
-Bind(FP_T(function), |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4) { |
- return Functor4<FP_T(NONAME), R, P1, P2, P3, P4>( |
- function, p1, p2, p3, p4); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, class MethodT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5> |
-class MethodFunctor5 { |
- public: |
- MethodFunctor5(MethodT method, ObjectT* object, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4, |
- P5 p5) |
- : method_(method), object_(object), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5) {} |
- R operator()() const { |
- return (object_->*method_)(p1_, p2_, p3_, p4_, p5_); } |
- private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
-}; |
- |
-template <class FunctorT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5> |
-class Functor5 { |
- public: |
- Functor5(const FunctorT& functor, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) |
- : functor_(functor), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5) {} |
- R operator()() const { |
- return functor_(p1_, p2_, p3_, p4_, p5_); } |
- private: |
- FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
-}; |
- |
- |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5> |
-MethodFunctor5<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5> |
-Bind(FP_T(method), ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5) { |
- return MethodFunctor5<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>( |
- method, object, p1, p2, p3, p4, p5); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5) const |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5> |
-MethodFunctor5<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5> |
-Bind(FP_T(method), const ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5) { |
- return MethodFunctor5<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>( |
- method, object, p1, p2, p3, p4, p5); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5> |
-MethodFunctor5<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5> |
-Bind(FP_T(method), const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5) { |
- return MethodFunctor5<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>( |
- method, object.get(), p1, p2, p3, p4, p5); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)(P1, P2, P3, P4, P5) |
- |
-template <class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5> |
-Functor5<FP_T(NONAME), R, P1, P2, P3, P4, P5> |
-Bind(FP_T(function), |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5) { |
- return Functor5<FP_T(NONAME), R, P1, P2, P3, P4, P5>( |
- function, p1, p2, p3, p4, p5); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, class MethodT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6> |
-class MethodFunctor6 { |
+template <class ObjectT, class MethodT, class R, typename... Args> |
+class MethodFunctor { |
public: |
- MethodFunctor6(MethodT method, ObjectT* object, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4, |
- P5 p5, |
- P6 p6) |
- : method_(method), object_(object), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5), |
- p6_(p6) {} |
+ MethodFunctor(MethodT method, ObjectT* object, Args... args) |
+ : method_(method), object_(object), args_(args...) {} |
R operator()() const { |
- return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_); } |
- private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
- typename rtc::remove_reference<P6>::type p6_; |
-}; |
+ return CallMethod(typename sequence_generator<sizeof...(Args)>::type()); |
+ } |
-template <class FunctorT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6> |
-class Functor6 { |
- public: |
- Functor6(const FunctorT& functor, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) |
- : functor_(functor), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5), |
- p6_(p6) {} |
- R operator()() const { |
- return functor_(p1_, p2_, p3_, p4_, p5_, p6_); } |
private: |
- FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
- typename rtc::remove_reference<P6>::type p6_; |
-}; |
- |
- |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6> |
-MethodFunctor6<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6> |
-Bind(FP_T(method), ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6) { |
- return MethodFunctor6<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>( |
- method, object, p1, p2, p3, p4, p5, p6); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6) const |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6> |
-MethodFunctor6<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6> |
-Bind(FP_T(method), const ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6) { |
- return MethodFunctor6<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>( |
- method, object, p1, p2, p3, p4, p5, p6); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6) |
- |
-template <class ObjectT, class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6> |
-MethodFunctor6<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6> |
-Bind(FP_T(method), const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6) { |
- return MethodFunctor6<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>( |
- method, object.get(), p1, p2, p3, p4, p5, p6); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)(P1, P2, P3, P4, P5, P6) |
- |
-template <class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6> |
-Functor6<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6> |
-Bind(FP_T(function), |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6) { |
- return Functor6<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>( |
- function, p1, p2, p3, p4, p5, p6); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, |
- class MethodT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7> |
-class MethodFunctor7 { |
- public: |
- MethodFunctor7(MethodT method, |
- ObjectT* object, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4, |
- P5 p5, |
- P6 p6, |
- P7 p7) |
- : method_(method), |
- object_(object), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5), |
- p6_(p6), |
- p7_(p7) {} |
- R operator()() const { |
- return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_, p7_); |
+ // Use sequence_generator (see template_util.h) to expand a MethodFunctor |
+ // with 2 arguments to (std::get<0>(args_), std::get<1>(args_)), for |
+ // instance. |
+ template <int... S> |
+ R CallMethod(sequence<S...>) const { |
+ return (object_->*method_)(std::get<S>(args_)...); |
} |
- private: |
MethodT method_; |
typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
- typename rtc::remove_reference<P6>::type p6_; |
- typename rtc::remove_reference<P7>::type p7_; |
+ typename std::tuple<typename std::remove_reference<Args>::type...> args_; |
}; |
-template <class FunctorT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7> |
-class Functor7 { |
+template <class FunctorT, class R, typename... Args> |
+class Functor { |
public: |
- Functor7(const FunctorT& functor, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4, |
- P5 p5, |
- P6 p6, |
- P7 p7) |
- : functor_(functor), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5), |
- p6_(p6), |
- p7_(p7) {} |
- R operator()() const { return functor_(p1_, p2_, p3_, p4_, p5_, p6_, p7_); } |
- |
- private: |
- FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
- typename rtc::remove_reference<P6>::type p6_; |
- typename rtc::remove_reference<P7>::type p7_; |
-}; |
- |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7) |
- |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7> |
-MethodFunctor7<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7> Bind( |
- FP_T(method), |
- ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7) { |
- return MethodFunctor7<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7>( |
- method, object, p1, p2, p3, p4, p5, p6, p7); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7) const |
- |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7> |
-MethodFunctor7<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7> Bind( |
- FP_T(method), |
- const ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7) { |
- return MethodFunctor7<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, |
- P7>(method, object, p1, p2, p3, p4, p5, p6, p7); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7) |
- |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7> |
-MethodFunctor7<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7> Bind( |
- FP_T(method), |
- const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7) { |
- return MethodFunctor7<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7>( |
- method, object.get(), p1, p2, p3, p4, p5, p6, p7); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)(P1, P2, P3, P4, P5, P6, P7) |
- |
-template <class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7> |
-Functor7<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7> Bind( |
- FP_T(function), |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7) { |
- return Functor7<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7>( |
- function, p1, p2, p3, p4, p5, p6, p7); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, |
- class MethodT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8> |
-class MethodFunctor8 { |
- public: |
- MethodFunctor8(MethodT method, |
- ObjectT* object, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4, |
- P5 p5, |
- P6 p6, |
- P7 p7, |
- P8 p8) |
- : method_(method), |
- object_(object), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5), |
- p6_(p6), |
- p7_(p7), |
- p8_(p8) {} |
+ Functor(const FunctorT& functor, Args... args) |
+ : functor_(functor), args_(args...) {} |
R operator()() const { |
- return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_, p7_, p8_); |
+ return CallFunction(typename sequence_generator<sizeof...(Args)>::type()); |
} |
private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
- typename rtc::remove_reference<P6>::type p6_; |
- typename rtc::remove_reference<P7>::type p7_; |
- typename rtc::remove_reference<P8>::type p8_; |
-}; |
- |
-template <class FunctorT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8> |
-class Functor8 { |
- public: |
- Functor8(const FunctorT& functor, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4, |
- P5 p5, |
- P6 p6, |
- P7 p7, |
- P8 p8) |
- : functor_(functor), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5), |
- p6_(p6), |
- p7_(p7), |
- p8_(p8) {} |
- R operator()() const { |
- return functor_(p1_, p2_, p3_, p4_, p5_, p6_, p7_, p8_); |
+ // Use sequence_generator (see template_util.h) to expand a Functor |
+ // with 2 arguments to (std::get<0>(args_), std::get<1>(args_)), for |
+ // instance. |
+ template <int... S> |
+ R CallFunction(sequence<S...>) const { |
+ return functor_(std::get<S>(args_)...); |
} |
- private: |
FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
- typename rtc::remove_reference<P6>::type p6_; |
- typename rtc::remove_reference<P7>::type p7_; |
- typename rtc::remove_reference<P8>::type p8_; |
+ typename std::tuple<typename std::remove_reference<Args>::type...> args_; |
}; |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8) |
+#define FP_T(x) R (ObjectT::*x)(Args...) |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8> |
-MethodFunctor8<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8> Bind( |
+template <class ObjectT, class R, typename... Args> |
+MethodFunctor<ObjectT, FP_T(NONAME), R, Args...> Bind( |
FP_T(method), |
ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7, |
- typename detail::identity<P8>::type p8) { |
- return MethodFunctor8<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, |
- P8>(method, object, p1, p2, p3, p4, p5, p6, p7, p8); |
+ typename detail::identity<Args>::type... args) { |
+ return MethodFunctor<ObjectT, FP_T(NONAME), R, Args...>(method, object, |
+ args...); |
} |
#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8) const |
+#define FP_T(x) R (ObjectT::*x)(Args...) const |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8> |
-MethodFunctor8<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8> |
-Bind(FP_T(method), |
- const ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7, |
- typename detail::identity<P8>::type p8) { |
- return MethodFunctor8<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, |
- P7, P8>(method, object, p1, p2, p3, p4, p5, p6, p7, p8); |
+template <class ObjectT, class R, typename... Args> |
+MethodFunctor<const ObjectT, FP_T(NONAME), R, Args...> Bind( |
+ FP_T(method), |
+ const ObjectT* object, |
+ typename detail::identity<Args>::type... args) { |
+ return MethodFunctor<const ObjectT, FP_T(NONAME), R, Args...>(method, object, |
+ args...); |
} |
#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8) |
+#define FP_T(x) R (ObjectT::*x)(Args...) |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8> |
-MethodFunctor8<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8> Bind( |
+template <class ObjectT, class R, typename... Args> |
+MethodFunctor<ObjectT, FP_T(NONAME), R, Args...> Bind( |
FP_T(method), |
const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7, |
- typename detail::identity<P8>::type p8) { |
- return MethodFunctor8<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, |
- P8>(method, object.get(), p1, p2, p3, p4, p5, p6, p7, |
- p8); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (*x)(P1, P2, P3, P4, P5, P6, P7, P8) |
- |
-template <class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8> |
-Functor8<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8> Bind( |
- FP_T(function), |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7, |
- typename detail::identity<P8>::type p8) { |
- return Functor8<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8>( |
- function, p1, p2, p3, p4, p5, p6, p7, p8); |
-} |
- |
-#undef FP_T |
- |
-template <class ObjectT, |
- class MethodT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8, |
- class P9> |
-class MethodFunctor9 { |
- public: |
- MethodFunctor9(MethodT method, |
- ObjectT* object, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4, |
- P5 p5, |
- P6 p6, |
- P7 p7, |
- P8 p8, |
- P9 p9) |
- : method_(method), |
- object_(object), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5), |
- p6_(p6), |
- p7_(p7), |
- p8_(p8), |
- p9_(p9) {} |
- R operator()() const { |
- return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_, p7_, p8_, p9_); |
- } |
- |
- private: |
- MethodT method_; |
- typename detail::PointerType<ObjectT>::type object_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
- typename rtc::remove_reference<P6>::type p6_; |
- typename rtc::remove_reference<P7>::type p7_; |
- typename rtc::remove_reference<P8>::type p8_; |
- typename rtc::remove_reference<P9>::type p9_; |
-}; |
- |
-template <class FunctorT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8, |
- class P9> |
-class Functor9 { |
- public: |
- Functor9(const FunctorT& functor, |
- P1 p1, |
- P2 p2, |
- P3 p3, |
- P4 p4, |
- P5 p5, |
- P6 p6, |
- P7 p7, |
- P8 p8, |
- P9 p9) |
- : functor_(functor), |
- p1_(p1), |
- p2_(p2), |
- p3_(p3), |
- p4_(p4), |
- p5_(p5), |
- p6_(p6), |
- p7_(p7), |
- p8_(p8), |
- p9_(p9) {} |
- R operator()() const { |
- return functor_(p1_, p2_, p3_, p4_, p5_, p6_, p7_, p8_, p9_); |
- } |
- |
- private: |
- FunctorT functor_; |
- typename rtc::remove_reference<P1>::type p1_; |
- typename rtc::remove_reference<P2>::type p2_; |
- typename rtc::remove_reference<P3>::type p3_; |
- typename rtc::remove_reference<P4>::type p4_; |
- typename rtc::remove_reference<P5>::type p5_; |
- typename rtc::remove_reference<P6>::type p6_; |
- typename rtc::remove_reference<P7>::type p7_; |
- typename rtc::remove_reference<P8>::type p8_; |
- typename rtc::remove_reference<P9>::type p9_; |
-}; |
- |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8, P9) |
- |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8, |
- class P9> |
-MethodFunctor9<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8, P9> |
-Bind(FP_T(method), |
- ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7, |
- typename detail::identity<P8>::type p8, |
- typename detail::identity<P9>::type p9) { |
- return MethodFunctor9<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, |
- P8, P9>(method, object, p1, p2, p3, p4, p5, p6, p7, p8, |
- p9); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8, P9) const |
- |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8, |
- class P9> |
-MethodFunctor9<const ObjectT, |
- FP_T(NONAME), |
- R, |
- P1, |
- P2, |
- P3, |
- P4, |
- P5, |
- P6, |
- P7, |
- P8, |
- P9> |
-Bind(FP_T(method), |
- const ObjectT* object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7, |
- typename detail::identity<P8>::type p8, |
- typename detail::identity<P9>::type p9) { |
- return MethodFunctor9<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, |
- P7, P8, P9>(method, object, p1, p2, p3, p4, p5, p6, p7, |
- p8, p9); |
-} |
- |
-#undef FP_T |
-#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8, P9) |
- |
-template <class ObjectT, |
- class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8, |
- class P9> |
-MethodFunctor9<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8, P9> |
-Bind(FP_T(method), |
- const scoped_refptr<ObjectT>& object, |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7, |
- typename detail::identity<P8>::type p8, |
- typename detail::identity<P9>::type p9) { |
- return MethodFunctor9<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, |
- P8, P9>(method, object.get(), p1, p2, p3, p4, p5, p6, |
- p7, p8, p9); |
+ typename detail::identity<Args>::type... args) { |
+ return MethodFunctor<ObjectT, FP_T(NONAME), R, Args...>(method, object.get(), |
+ args...); |
} |
#undef FP_T |
-#define FP_T(x) R (*x)(P1, P2, P3, P4, P5, P6, P7, P8, P9) |
+#define FP_T(x) R (*x)(Args...) |
-template <class R, |
- class P1, |
- class P2, |
- class P3, |
- class P4, |
- class P5, |
- class P6, |
- class P7, |
- class P8, |
- class P9> |
-Functor9<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8, P9> Bind( |
+template <class R, typename... Args> |
+Functor<FP_T(NONAME), R, Args...> Bind( |
FP_T(function), |
- typename detail::identity<P1>::type p1, |
- typename detail::identity<P2>::type p2, |
- typename detail::identity<P3>::type p3, |
- typename detail::identity<P4>::type p4, |
- typename detail::identity<P5>::type p5, |
- typename detail::identity<P6>::type p6, |
- typename detail::identity<P7>::type p7, |
- typename detail::identity<P8>::type p8, |
- typename detail::identity<P9>::type p9) { |
- return Functor9<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8, P9>( |
- function, p1, p2, p3, p4, p5, p6, p7, p8, p9); |
+ typename detail::identity<Args>::type... args) { |
+ return Functor<FP_T(NONAME), R, Args...>(function, args...); |
} |
#undef FP_T |