mem_fun_ptr_gen_10.hpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. /*==============================================================================
  2. Copyright (c) 2001-2010 Joel de Guzman
  3. Copyright (c) 2010 Thomas Heller
  4. Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. ==============================================================================*/
  7. namespace detail {
  8. template <typename Object, typename MemPtr>
  9. struct mem_fun_ptr_gen
  10. {
  11. mem_fun_ptr_gen(Object const& obj_, MemPtr ptr_)
  12. : obj(obj_)
  13. , ptr(ptr_)
  14. {}
  15. typename phoenix::expression::mem_fun_ptr<Object, MemPtr>::type const
  16. operator()() const
  17. {
  18. return phoenix::expression::mem_fun_ptr<Object, MemPtr>::make(obj, ptr);
  19. }
  20. template <typename A0>
  21. typename phoenix::expression::mem_fun_ptr<
  22. Object
  23. , MemPtr
  24. , A0
  25. >::type const
  26. operator()(A0 const& a0) const
  27. {
  28. return phoenix::expression::mem_fun_ptr<
  29. Object
  30. , MemPtr
  31. , A0
  32. >::make(obj, ptr, a0);
  33. }
  34. template <typename A0 , typename A1>
  35. typename phoenix::expression::mem_fun_ptr<
  36. Object
  37. , MemPtr
  38. , A0 , A1
  39. >::type const
  40. operator()(A0 const& a0 , A1 const& a1) const
  41. {
  42. return phoenix::expression::mem_fun_ptr<
  43. Object
  44. , MemPtr
  45. , A0 , A1
  46. >::make(obj, ptr, a0 , a1);
  47. }
  48. template <typename A0 , typename A1 , typename A2>
  49. typename phoenix::expression::mem_fun_ptr<
  50. Object
  51. , MemPtr
  52. , A0 , A1 , A2
  53. >::type const
  54. operator()(A0 const& a0 , A1 const& a1 , A2 const& a2) const
  55. {
  56. return phoenix::expression::mem_fun_ptr<
  57. Object
  58. , MemPtr
  59. , A0 , A1 , A2
  60. >::make(obj, ptr, a0 , a1 , a2);
  61. }
  62. template <typename A0 , typename A1 , typename A2 , typename A3>
  63. typename phoenix::expression::mem_fun_ptr<
  64. Object
  65. , MemPtr
  66. , A0 , A1 , A2 , A3
  67. >::type const
  68. operator()(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3) const
  69. {
  70. return phoenix::expression::mem_fun_ptr<
  71. Object
  72. , MemPtr
  73. , A0 , A1 , A2 , A3
  74. >::make(obj, ptr, a0 , a1 , a2 , a3);
  75. }
  76. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
  77. typename phoenix::expression::mem_fun_ptr<
  78. Object
  79. , MemPtr
  80. , A0 , A1 , A2 , A3 , A4
  81. >::type const
  82. operator()(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4) const
  83. {
  84. return phoenix::expression::mem_fun_ptr<
  85. Object
  86. , MemPtr
  87. , A0 , A1 , A2 , A3 , A4
  88. >::make(obj, ptr, a0 , a1 , a2 , a3 , a4);
  89. }
  90. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
  91. typename phoenix::expression::mem_fun_ptr<
  92. Object
  93. , MemPtr
  94. , A0 , A1 , A2 , A3 , A4 , A5
  95. >::type const
  96. operator()(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5) const
  97. {
  98. return phoenix::expression::mem_fun_ptr<
  99. Object
  100. , MemPtr
  101. , A0 , A1 , A2 , A3 , A4 , A5
  102. >::make(obj, ptr, a0 , a1 , a2 , a3 , a4 , a5);
  103. }
  104. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
  105. typename phoenix::expression::mem_fun_ptr<
  106. Object
  107. , MemPtr
  108. , A0 , A1 , A2 , A3 , A4 , A5 , A6
  109. >::type const
  110. operator()(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6) const
  111. {
  112. return phoenix::expression::mem_fun_ptr<
  113. Object
  114. , MemPtr
  115. , A0 , A1 , A2 , A3 , A4 , A5 , A6
  116. >::make(obj, ptr, a0 , a1 , a2 , a3 , a4 , a5 , a6);
  117. }
  118. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
  119. typename phoenix::expression::mem_fun_ptr<
  120. Object
  121. , MemPtr
  122. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
  123. >::type const
  124. operator()(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7) const
  125. {
  126. return phoenix::expression::mem_fun_ptr<
  127. Object
  128. , MemPtr
  129. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
  130. >::make(obj, ptr, a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
  131. }
  132. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
  133. typename phoenix::expression::mem_fun_ptr<
  134. Object
  135. , MemPtr
  136. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
  137. >::type const
  138. operator()(A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8) const
  139. {
  140. return phoenix::expression::mem_fun_ptr<
  141. Object
  142. , MemPtr
  143. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
  144. >::make(obj, ptr, a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
  145. }
  146. Object const& obj;
  147. MemPtr ptr;
  148. };
  149. struct make_mem_fun_ptr_gen
  150. : proto::callable
  151. {
  152. template<typename Sig>
  153. struct result;
  154. template<typename This, typename Object, typename MemPtr>
  155. struct result<This(Object, MemPtr)>
  156. {
  157. typedef
  158. mem_fun_ptr_gen<
  159. typename remove_const<typename remove_reference<Object>::type>::type
  160. , typename remove_const<typename remove_reference<MemPtr>::type>::type
  161. >
  162. type;
  163. };
  164. template<typename Object, typename MemPtr>
  165. mem_fun_ptr_gen<Object, MemPtr> operator()(Object const & obj, MemPtr ptr) const
  166. {
  167. return mem_fun_ptr_gen<Object, MemPtr>(obj, ptr);
  168. }
  169. };
  170. }