function_ptr_20.hpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  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 <typename Dummy>
  7. struct function_ptr_impl<2, Dummy>
  8. {
  9. template <typename RT, typename FP>
  10. struct impl
  11. {
  12. typedef RT result_type;
  13. impl(FP fp_)
  14. : fp(fp_) {}
  15. template <typename A0 , typename A1>
  16. RT operator()(A0 & a0 , A1 & a1) const
  17. {
  18. return fp(a0 , a1);
  19. }
  20. FP fp;
  21. };
  22. };
  23. template <typename Dummy>
  24. struct function_ptr_impl<3, Dummy>
  25. {
  26. template <typename RT, typename FP>
  27. struct impl
  28. {
  29. typedef RT result_type;
  30. impl(FP fp_)
  31. : fp(fp_) {}
  32. template <typename A0 , typename A1 , typename A2>
  33. RT operator()(A0 & a0 , A1 & a1 , A2 & a2) const
  34. {
  35. return fp(a0 , a1 , a2);
  36. }
  37. FP fp;
  38. };
  39. };
  40. template <typename Dummy>
  41. struct function_ptr_impl<4, Dummy>
  42. {
  43. template <typename RT, typename FP>
  44. struct impl
  45. {
  46. typedef RT result_type;
  47. impl(FP fp_)
  48. : fp(fp_) {}
  49. template <typename A0 , typename A1 , typename A2 , typename A3>
  50. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
  51. {
  52. return fp(a0 , a1 , a2 , a3);
  53. }
  54. FP fp;
  55. };
  56. };
  57. template <typename Dummy>
  58. struct function_ptr_impl<5, Dummy>
  59. {
  60. template <typename RT, typename FP>
  61. struct impl
  62. {
  63. typedef RT result_type;
  64. impl(FP fp_)
  65. : fp(fp_) {}
  66. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
  67. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
  68. {
  69. return fp(a0 , a1 , a2 , a3 , a4);
  70. }
  71. FP fp;
  72. };
  73. };
  74. template <typename Dummy>
  75. struct function_ptr_impl<6, Dummy>
  76. {
  77. template <typename RT, typename FP>
  78. struct impl
  79. {
  80. typedef RT result_type;
  81. impl(FP fp_)
  82. : fp(fp_) {}
  83. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
  84. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
  85. {
  86. return fp(a0 , a1 , a2 , a3 , a4 , a5);
  87. }
  88. FP fp;
  89. };
  90. };
  91. template <typename Dummy>
  92. struct function_ptr_impl<7, Dummy>
  93. {
  94. template <typename RT, typename FP>
  95. struct impl
  96. {
  97. typedef RT result_type;
  98. impl(FP fp_)
  99. : fp(fp_) {}
  100. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
  101. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
  102. {
  103. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6);
  104. }
  105. FP fp;
  106. };
  107. };
  108. template <typename Dummy>
  109. struct function_ptr_impl<8, Dummy>
  110. {
  111. template <typename RT, typename FP>
  112. struct impl
  113. {
  114. typedef RT result_type;
  115. impl(FP fp_)
  116. : fp(fp_) {}
  117. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
  118. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
  119. {
  120. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
  121. }
  122. FP fp;
  123. };
  124. };
  125. template <typename Dummy>
  126. struct function_ptr_impl<9, Dummy>
  127. {
  128. template <typename RT, typename FP>
  129. struct impl
  130. {
  131. typedef RT result_type;
  132. impl(FP fp_)
  133. : fp(fp_) {}
  134. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
  135. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
  136. {
  137. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
  138. }
  139. FP fp;
  140. };
  141. };
  142. template <typename Dummy>
  143. struct function_ptr_impl<10, Dummy>
  144. {
  145. template <typename RT, typename FP>
  146. struct impl
  147. {
  148. typedef RT result_type;
  149. impl(FP fp_)
  150. : fp(fp_) {}
  151. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
  152. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const
  153. {
  154. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
  155. }
  156. FP fp;
  157. };
  158. };
  159. template <typename Dummy>
  160. struct function_ptr_impl<11, Dummy>
  161. {
  162. template <typename RT, typename FP>
  163. struct impl
  164. {
  165. typedef RT result_type;
  166. impl(FP fp_)
  167. : fp(fp_) {}
  168. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10>
  169. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const
  170. {
  171. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10);
  172. }
  173. FP fp;
  174. };
  175. };
  176. template <typename Dummy>
  177. struct function_ptr_impl<12, Dummy>
  178. {
  179. template <typename RT, typename FP>
  180. struct impl
  181. {
  182. typedef RT result_type;
  183. impl(FP fp_)
  184. : fp(fp_) {}
  185. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11>
  186. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11) const
  187. {
  188. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11);
  189. }
  190. FP fp;
  191. };
  192. };
  193. template <typename Dummy>
  194. struct function_ptr_impl<13, Dummy>
  195. {
  196. template <typename RT, typename FP>
  197. struct impl
  198. {
  199. typedef RT result_type;
  200. impl(FP fp_)
  201. : fp(fp_) {}
  202. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12>
  203. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12) const
  204. {
  205. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12);
  206. }
  207. FP fp;
  208. };
  209. };
  210. template <typename Dummy>
  211. struct function_ptr_impl<14, Dummy>
  212. {
  213. template <typename RT, typename FP>
  214. struct impl
  215. {
  216. typedef RT result_type;
  217. impl(FP fp_)
  218. : fp(fp_) {}
  219. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13>
  220. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13) const
  221. {
  222. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13);
  223. }
  224. FP fp;
  225. };
  226. };
  227. template <typename Dummy>
  228. struct function_ptr_impl<15, Dummy>
  229. {
  230. template <typename RT, typename FP>
  231. struct impl
  232. {
  233. typedef RT result_type;
  234. impl(FP fp_)
  235. : fp(fp_) {}
  236. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14>
  237. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14) const
  238. {
  239. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14);
  240. }
  241. FP fp;
  242. };
  243. };
  244. template <typename Dummy>
  245. struct function_ptr_impl<16, Dummy>
  246. {
  247. template <typename RT, typename FP>
  248. struct impl
  249. {
  250. typedef RT result_type;
  251. impl(FP fp_)
  252. : fp(fp_) {}
  253. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15>
  254. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15) const
  255. {
  256. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15);
  257. }
  258. FP fp;
  259. };
  260. };
  261. template <typename Dummy>
  262. struct function_ptr_impl<17, Dummy>
  263. {
  264. template <typename RT, typename FP>
  265. struct impl
  266. {
  267. typedef RT result_type;
  268. impl(FP fp_)
  269. : fp(fp_) {}
  270. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16>
  271. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16) const
  272. {
  273. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16);
  274. }
  275. FP fp;
  276. };
  277. };
  278. template <typename Dummy>
  279. struct function_ptr_impl<18, Dummy>
  280. {
  281. template <typename RT, typename FP>
  282. struct impl
  283. {
  284. typedef RT result_type;
  285. impl(FP fp_)
  286. : fp(fp_) {}
  287. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17>
  288. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17) const
  289. {
  290. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17);
  291. }
  292. FP fp;
  293. };
  294. };
  295. template <typename Dummy>
  296. struct function_ptr_impl<19, Dummy>
  297. {
  298. template <typename RT, typename FP>
  299. struct impl
  300. {
  301. typedef RT result_type;
  302. impl(FP fp_)
  303. : fp(fp_) {}
  304. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18>
  305. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18) const
  306. {
  307. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18);
  308. }
  309. FP fp;
  310. };
  311. };
  312. template <typename Dummy>
  313. struct function_ptr_impl<20, Dummy>
  314. {
  315. template <typename RT, typename FP>
  316. struct impl
  317. {
  318. typedef RT result_type;
  319. impl(FP fp_)
  320. : fp(fp_) {}
  321. template <typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 , typename A11 , typename A12 , typename A13 , typename A14 , typename A15 , typename A16 , typename A17 , typename A18 , typename A19>
  322. RT operator()(A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19) const
  323. {
  324. return fp(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19);
  325. }
  326. FP fp;
  327. };
  328. };