function_traits.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>function_traits</title>
  5. <link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  7. <link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.TypeTraits">
  8. <link rel="up" href="../reference.html" title="Alphabetical Reference">
  9. <link rel="prev" href="floating_point_promotion.html" title="floating_point_promotion">
  10. <link rel="next" href="has_bit_and.html" title="has_bit_and">
  11. </head>
  12. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  13. <table cellpadding="2" width="100%"><tr>
  14. <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
  15. <td align="center"><a href="../../../../../../index.html">Home</a></td>
  16. <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
  17. <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
  18. <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
  19. <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
  20. </tr></table>
  21. <hr>
  22. <div class="spirit-nav">
  23. <a accesskey="p" href="floating_point_promotion.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_bit_and.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h3 class="title">
  27. <a name="boost_typetraits.reference.function_traits"></a><a class="link" href="function_traits.html" title="function_traits">function_traits</a>
  28. </h3></div></div></div>
  29. <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
  30. <span class="keyword">struct</span> <span class="identifier">function_traits</span>
  31. <span class="special">{</span>
  32. <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">arity</span> <span class="special">=</span> <em class="replaceable"><code>see-below</code></em><span class="special">;</span>
  33. <span class="keyword">typedef</span> <em class="replaceable"><code>see-below</code></em> <span class="identifier">result_type</span><span class="special">;</span>
  34. <span class="keyword">typedef</span> <em class="replaceable"><code>see-below</code></em> arg<em class="replaceable"><code>N</code></em>_type<span class="special">;</span>
  35. <span class="special">};</span>
  36. </pre>
  37. <p>
  38. The class template function_traits will only compile if:
  39. </p>
  40. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  41. <li class="listitem">
  42. The compiler supports partial specialization of class templates.
  43. </li>
  44. <li class="listitem">
  45. The template argument <code class="computeroutput"><span class="identifier">F</span></code>
  46. is a <span class="emphasis"><em>function type</em></span>, note that this <span class="emphasis"><em><span class="bold"><strong>is not</strong></span></em></span> the same thing as a <span class="emphasis"><em>pointer
  47. to a function</em></span>.
  48. </li>
  49. </ul></div>
  50. <div class="tip"><table border="0" summary="Tip">
  51. <tr>
  52. <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../doc/src/images/tip.png"></td>
  53. <th align="left">Tip</th>
  54. </tr>
  55. <tr><td align="left" valign="top"><p>
  56. function_traits is intended to introspect only C++ functions of the form
  57. R (), R( A1 ), R ( A1, ... etc. ) and not function pointers or class member
  58. functions. To convert a function pointer type to a suitable type use <a class="link" href="remove_pointer.html" title="remove_pointer">remove_pointer</a>.
  59. </p></td></tr>
  60. </table></div>
  61. <div class="table">
  62. <a name="boost_typetraits.reference.function_traits.function_traits_members"></a><p class="title"><b>Table&#160;1.22.&#160;Function Traits Members</b></p>
  63. <div class="table-contents"><table class="table" summary="Function Traits Members">
  64. <colgroup>
  65. <col>
  66. <col>
  67. </colgroup>
  68. <thead><tr>
  69. <th>
  70. <p>
  71. Member
  72. </p>
  73. </th>
  74. <th>
  75. <p>
  76. Description
  77. </p>
  78. </th>
  79. </tr></thead>
  80. <tbody>
  81. <tr>
  82. <td>
  83. <p>
  84. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">arity</span></code>
  85. </p>
  86. </td>
  87. <td>
  88. <p>
  89. An integral constant expression that gives the number of arguments
  90. accepted by the function type <code class="computeroutput"><span class="identifier">F</span></code>.
  91. </p>
  92. </td>
  93. </tr>
  94. <tr>
  95. <td>
  96. <p>
  97. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">result_type</span></code>
  98. </p>
  99. </td>
  100. <td>
  101. <p>
  102. The type returned by function type <code class="computeroutput"><span class="identifier">F</span></code>.
  103. </p>
  104. </td>
  105. </tr>
  106. <tr>
  107. <td>
  108. <p>
  109. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">&gt;::</span>arg<em class="replaceable"><code>N</code></em>_type</code>
  110. </p>
  111. </td>
  112. <td>
  113. <p>
  114. The <em class="replaceable"><code>N</code></em>th argument type of function type <code class="computeroutput"><span class="identifier">F</span></code>,
  115. where <code class="computeroutput"><span class="number">1</span> <span class="special">&lt;=</span>
  116. <span class="identifier">N</span> <span class="special">&lt;=</span>
  117. <span class="identifier">arity</span></code> of <code class="computeroutput"><span class="identifier">F</span></code>.
  118. </p>
  119. </td>
  120. </tr>
  121. </tbody>
  122. </table></div>
  123. </div>
  124. <br class="table-break"><div class="table">
  125. <a name="boost_typetraits.reference.function_traits.examples"></a><p class="title"><b>Table&#160;1.23.&#160;Examples</b></p>
  126. <div class="table-contents"><table class="table" summary="Examples">
  127. <colgroup>
  128. <col>
  129. <col>
  130. </colgroup>
  131. <thead><tr>
  132. <th>
  133. <p>
  134. Expression
  135. </p>
  136. </th>
  137. <th>
  138. <p>
  139. Result
  140. </p>
  141. </th>
  142. </tr></thead>
  143. <tbody>
  144. <tr>
  145. <td>
  146. <p>
  147. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">void</span>
  148. <span class="special">(</span><span class="keyword">void</span><span class="special">)&gt;::</span><span class="identifier">arity</span></code>
  149. </p>
  150. </td>
  151. <td>
  152. <p>
  153. An integral constant expression that has the value 0.
  154. </p>
  155. </td>
  156. </tr>
  157. <tr>
  158. <td>
  159. <p>
  160. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">long</span>
  161. <span class="special">(</span><span class="keyword">int</span><span class="special">)&gt;::</span><span class="identifier">arity</span></code>
  162. </p>
  163. </td>
  164. <td>
  165. <p>
  166. An integral constant expression that has the value 1.
  167. </p>
  168. </td>
  169. </tr>
  170. <tr>
  171. <td>
  172. <p>
  173. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">long</span>
  174. <span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">long</span><span class="special">,</span> <span class="keyword">double</span><span class="special">,</span> <span class="keyword">void</span><span class="special">*)&gt;::</span><span class="identifier">arity</span></code>
  175. </p>
  176. </td>
  177. <td>
  178. <p>
  179. An integral constant expression that has the value 4.
  180. </p>
  181. </td>
  182. </tr>
  183. <tr>
  184. <td>
  185. <p>
  186. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">void</span>
  187. <span class="special">(</span><span class="keyword">void</span><span class="special">)&gt;::</span><span class="identifier">result_type</span></code>
  188. </p>
  189. </td>
  190. <td>
  191. <p>
  192. The type <code class="computeroutput"><span class="keyword">void</span></code>.
  193. </p>
  194. </td>
  195. </tr>
  196. <tr>
  197. <td>
  198. <p>
  199. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">long</span>
  200. <span class="special">(</span><span class="keyword">int</span><span class="special">)&gt;::</span><span class="identifier">result_type</span></code>
  201. </p>
  202. </td>
  203. <td>
  204. <p>
  205. The type <code class="computeroutput"><span class="keyword">long</span></code>.
  206. </p>
  207. </td>
  208. </tr>
  209. <tr>
  210. <td>
  211. <p>
  212. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">long</span>
  213. <span class="special">(</span><span class="keyword">int</span><span class="special">)&gt;::</span><span class="identifier">arg1_type</span></code>
  214. </p>
  215. </td>
  216. <td>
  217. <p>
  218. The type <code class="computeroutput"><span class="keyword">int</span></code>.
  219. </p>
  220. </td>
  221. </tr>
  222. <tr>
  223. <td>
  224. <p>
  225. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">long</span>
  226. <span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">long</span><span class="special">,</span> <span class="keyword">double</span><span class="special">,</span> <span class="keyword">void</span><span class="special">*)&gt;::</span><span class="identifier">arg4_type</span></code>
  227. </p>
  228. </td>
  229. <td>
  230. <p>
  231. The type <code class="computeroutput"><span class="keyword">void</span><span class="special">*</span></code>.
  232. </p>
  233. </td>
  234. </tr>
  235. <tr>
  236. <td>
  237. <p>
  238. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">long</span>
  239. <span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">long</span><span class="special">,</span> <span class="keyword">double</span><span class="special">,</span> <span class="keyword">void</span><span class="special">*)&gt;::</span><span class="identifier">arg5_type</span></code>
  240. </p>
  241. </td>
  242. <td>
  243. <p>
  244. A compiler error: there is no <code class="computeroutput"><span class="identifier">arg5_type</span></code>
  245. since there are only four arguments.
  246. </p>
  247. </td>
  248. </tr>
  249. <tr>
  250. <td>
  251. <p>
  252. <code class="computeroutput"><span class="identifier">function_traits</span><span class="special">&lt;</span><span class="keyword">long</span>
  253. <span class="special">(*)(</span><span class="keyword">void</span><span class="special">)&gt;::</span><span class="identifier">arity</span></code>
  254. </p>
  255. </td>
  256. <td>
  257. <p>
  258. A compiler error: argument type is a <span class="emphasis"><em>function pointer</em></span>,
  259. and not a <span class="emphasis"><em>function type</em></span>.
  260. </p>
  261. </td>
  262. </tr>
  263. </tbody>
  264. </table></div>
  265. </div>
  266. <br class="table-break"><p>
  267. <span class="bold"><strong>Compiler Compatibility:</strong></span> All current compilers
  268. are supported by this trait.
  269. </p>
  270. </div>
  271. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  272. <td align="left"></td>
  273. <td align="right"><div class="copyright-footer">Copyright &#169; 2000, 2011 Adobe Systems Inc, David Abrahams,
  274. Frederic Bron, Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant,
  275. Jesse Jones, Mat Marcus, Itay Maman, John Maddock, Alexander Nasonov, Thorsten
  276. Ottosen, Roman Perepelitsa, Robert Ramey, Jeremy Siek, Robert Stewart and Steven
  277. Watanabe<p>
  278. Distributed under the Boost Software License, Version 1.0. (See accompanying
  279. file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
  280. </p>
  281. </div></td>
  282. </tr></table>
  283. <hr>
  284. <div class="spirit-nav">
  285. <a accesskey="p" href="floating_point_promotion.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="has_bit_and.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  286. </div>
  287. </body>
  288. </html>