bind_function_10.hpp 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. /*=============================================================================
  2. Copyright (c) 2001-2007 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. template <
  7. typename RT
  8. , typename T0 , typename T1
  9. , typename A0 , typename A1
  10. >
  11. inline
  12. typename detail::expression::function_eval<
  13. detail::function_ptr<
  14. 2
  15. , RT
  16. , RT(*)(T0 , T1)
  17. >
  18. , A0 , A1
  19. >::type const
  20. bind(
  21. RT(*f)(T0 , T1)
  22. , A0 const& a0 , A1 const& a1
  23. )
  24. {
  25. typedef detail::function_ptr<
  26. 2
  27. , RT
  28. , RT(*)(T0 , T1)
  29. > fp_type;
  30. return
  31. detail::expression::function_eval<
  32. fp_type
  33. , A0 , A1
  34. >::make(
  35. fp_type(f)
  36. , a0 , a1
  37. );
  38. }
  39. template <
  40. typename RT
  41. , typename T0 , typename T1 , typename T2
  42. , typename A0 , typename A1 , typename A2
  43. >
  44. inline
  45. typename detail::expression::function_eval<
  46. detail::function_ptr<
  47. 3
  48. , RT
  49. , RT(*)(T0 , T1 , T2)
  50. >
  51. , A0 , A1 , A2
  52. >::type const
  53. bind(
  54. RT(*f)(T0 , T1 , T2)
  55. , A0 const& a0 , A1 const& a1 , A2 const& a2
  56. )
  57. {
  58. typedef detail::function_ptr<
  59. 3
  60. , RT
  61. , RT(*)(T0 , T1 , T2)
  62. > fp_type;
  63. return
  64. detail::expression::function_eval<
  65. fp_type
  66. , A0 , A1 , A2
  67. >::make(
  68. fp_type(f)
  69. , a0 , a1 , a2
  70. );
  71. }
  72. template <
  73. typename RT
  74. , typename T0 , typename T1 , typename T2 , typename T3
  75. , typename A0 , typename A1 , typename A2 , typename A3
  76. >
  77. inline
  78. typename detail::expression::function_eval<
  79. detail::function_ptr<
  80. 4
  81. , RT
  82. , RT(*)(T0 , T1 , T2 , T3)
  83. >
  84. , A0 , A1 , A2 , A3
  85. >::type const
  86. bind(
  87. RT(*f)(T0 , T1 , T2 , T3)
  88. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3
  89. )
  90. {
  91. typedef detail::function_ptr<
  92. 4
  93. , RT
  94. , RT(*)(T0 , T1 , T2 , T3)
  95. > fp_type;
  96. return
  97. detail::expression::function_eval<
  98. fp_type
  99. , A0 , A1 , A2 , A3
  100. >::make(
  101. fp_type(f)
  102. , a0 , a1 , a2 , a3
  103. );
  104. }
  105. template <
  106. typename RT
  107. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4
  108. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
  109. >
  110. inline
  111. typename detail::expression::function_eval<
  112. detail::function_ptr<
  113. 5
  114. , RT
  115. , RT(*)(T0 , T1 , T2 , T3 , T4)
  116. >
  117. , A0 , A1 , A2 , A3 , A4
  118. >::type const
  119. bind(
  120. RT(*f)(T0 , T1 , T2 , T3 , T4)
  121. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4
  122. )
  123. {
  124. typedef detail::function_ptr<
  125. 5
  126. , RT
  127. , RT(*)(T0 , T1 , T2 , T3 , T4)
  128. > fp_type;
  129. return
  130. detail::expression::function_eval<
  131. fp_type
  132. , A0 , A1 , A2 , A3 , A4
  133. >::make(
  134. fp_type(f)
  135. , a0 , a1 , a2 , a3 , a4
  136. );
  137. }
  138. template <
  139. typename RT
  140. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5
  141. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
  142. >
  143. inline
  144. typename detail::expression::function_eval<
  145. detail::function_ptr<
  146. 6
  147. , RT
  148. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5)
  149. >
  150. , A0 , A1 , A2 , A3 , A4 , A5
  151. >::type const
  152. bind(
  153. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5)
  154. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5
  155. )
  156. {
  157. typedef detail::function_ptr<
  158. 6
  159. , RT
  160. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5)
  161. > fp_type;
  162. return
  163. detail::expression::function_eval<
  164. fp_type
  165. , A0 , A1 , A2 , A3 , A4 , A5
  166. >::make(
  167. fp_type(f)
  168. , a0 , a1 , a2 , a3 , a4 , a5
  169. );
  170. }
  171. template <
  172. typename RT
  173. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6
  174. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
  175. >
  176. inline
  177. typename detail::expression::function_eval<
  178. detail::function_ptr<
  179. 7
  180. , RT
  181. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
  182. >
  183. , A0 , A1 , A2 , A3 , A4 , A5 , A6
  184. >::type const
  185. bind(
  186. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
  187. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6
  188. )
  189. {
  190. typedef detail::function_ptr<
  191. 7
  192. , RT
  193. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6)
  194. > fp_type;
  195. return
  196. detail::expression::function_eval<
  197. fp_type
  198. , A0 , A1 , A2 , A3 , A4 , A5 , A6
  199. >::make(
  200. fp_type(f)
  201. , a0 , a1 , a2 , a3 , a4 , a5 , a6
  202. );
  203. }
  204. template <
  205. typename RT
  206. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7
  207. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
  208. >
  209. inline
  210. typename detail::expression::function_eval<
  211. detail::function_ptr<
  212. 8
  213. , RT
  214. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
  215. >
  216. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
  217. >::type const
  218. bind(
  219. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
  220. , A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7
  221. )
  222. {
  223. typedef detail::function_ptr<
  224. 8
  225. , RT
  226. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)
  227. > fp_type;
  228. return
  229. detail::expression::function_eval<
  230. fp_type
  231. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
  232. >::make(
  233. fp_type(f)
  234. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7
  235. );
  236. }
  237. template <
  238. typename RT
  239. , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8
  240. , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
  241. >
  242. inline
  243. typename detail::expression::function_eval<
  244. detail::function_ptr<
  245. 9
  246. , RT
  247. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
  248. >
  249. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
  250. >::type const
  251. bind(
  252. RT(*f)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
  253. , 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
  254. )
  255. {
  256. typedef detail::function_ptr<
  257. 9
  258. , RT
  259. , RT(*)(T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)
  260. > fp_type;
  261. return
  262. detail::expression::function_eval<
  263. fp_type
  264. , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
  265. >::make(
  266. fp_type(f)
  267. , a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8
  268. );
  269. }