Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/functional/function_traits.html @ 14

Last change on this file since 14 was 12, checked in by landauf, 17 years ago

added boost

File size: 6.2 KB
Line 
1<html>
2
3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5<title>Boost Function Object Adapter Library</title>
6</head>
7
8<body bgcolor="#FFFFFF" text="#000000">
9
10<table border="1" bgcolor="#007F7F" cellpadding="2">
11  <tr>
12    <td bgcolor="#FFFFFF"><img src="../../boost.png" alt="boost.png (6897 bytes)" WIDTH="277" HEIGHT="86"></td>
13    <td><a href="../../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
14    <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
15    <td><a href="../../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
16    <td><a href="../../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
17    <td><a href="../../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
18  </tr>
19</table>
20
21<h1>Function Object Traits</h1>
22
23<p>The header <nobr><a
24href="../../boost/functional.hpp">functional.hpp</a></nobr> provides two
25traits class templates for functions and function objects:</p>
26
27<table border="1">
28<tr>
29        <th>Type</th>
30        <th>Contents</th>
31        <th>Description</th>
32</tr>
33<tr>
34        <td valign="top" rowspan="4"><tt><nobr>template &lt;typename T&gt;</nobr><br><nobr>struct unary_traits<nobr></tt>
35        </td>
36        <td valign="top"><tt><nobr>function_type</nobr></tt>
37        </td>
38        <td valign="top">The type of the function or function object itself (i.e., <tt>T</tt>).
39        </td>
40</tr>
41<tr>
42        <td valign="top"><tt><nobr>param_type</nobr></tt>
43        </td>
44        <td valign="top">The type that should be used to pass the function or function object as a parameter.
45        </td>
46</tr>
47<tr>
48        <td valign="top"><tt><nobr>result_type</nobr></tt>
49        </td>
50        <td valign="top">The type returned by the function or function object.
51        </td>
52</tr>
53<tr>
54        <td valign="top"><tt><nobr>argument_type</nobr></tt>
55        </td>
56        <td valign="top">The type of the argument to the function or function object.
57        </td>
58</tr>
59<tr>
60        <td valign="top" rowspan="5"><tt><nobr>template &lt;typename T&gt;</nobr><br><nobr>struct binary_traits<nobr></tt>
61        </td>
62        <td valign="top"><tt><nobr>function_type</nobr></tt>
63        </td>
64        <td valign="top">The type of the function or function object itself (i.e., <tt>T</tt>).
65        </td>
66</tr>
67<tr>
68        <td valign="top"><tt><nobr>param_type</nobr></tt>
69        </td>
70        <td valign="top">The type that should be used to pass the function or function object as a parameter.
71        </td>
72</tr>
73<tr>
74        <td valign="top"><tt><nobr>result_type</nobr></tt>
75        </td>
76        <td valign="top">The type returned by the function or function object.
77        </td>
78</tr>
79<tr>
80        <td valign="top"><tt><nobr>first_argument_type</nobr></tt>
81        </td>
82        <td valign="top">The type of the first argument to the function or function object.
83        </td>
84</tr>
85<tr>
86        <td valign="top"><tt><nobr>second_argument_type</nobr></tt>
87        </td>
88        <td valign="top">The type of the second argument to the function or function object.
89        </td>
90</tr>
91</table>
92
93<h3>Usage</h3>
94
95<p><tt><nobr>unary_traits</nobr></tt> should be instantiated with
96either a function taking a single parameter, or an adaptable unary
97function object (i.e., a class derived from
98<tt><nobr>std::unary_function</nobr></tt> or one which provides the
99same typedefs).  (See &sect;20.3.1 in the C++ Standard.)
100
101<p><tt><nobr>binary_traits</nobr></tt> should be instantiated with
102either a function taking two parameters, or an adaptable binary
103function object (i.e., a class derived from
104<tt><nobr>std::binary_function</nobr></tt> or one which provides the
105same typedefs).  (See &sect;20.3.1 in the C++ Standard.)
106
107<p>The most common usage of these templates is in function object
108adapters, thus allowing them to adapt plain functions as well as
109function objects.  You can do this by wherever you would normally
110write, for example,
111
112<blockquote><pre>
113typename Operation::argument_type
114</pre></blockquote>
115
116<p>simply writing
117
118<blockquote><pre>
119typename boost::unary_traits&lt;Operation&gt;::argument_type
120</pre></blockquote>
121
122<p>instead.
123
124<h3>Additional Types Defined</h3>
125
126<p>In addition to the standard result and argument typedefs, these
127traits templates define two additional types.
128
129<h4><tt>function_type</tt></h4>
130
131<p>This is the type of the function or function object, and can be
132used in declarations such as</p>
133
134<blockquote><pre>
135template &lt;class Predicate&gt;
136class unary_negate : // ...
137{
138  // ...
139  private:
140    <strong>typename unary_traits&lt;Predicate&gt;::function_type</strong> pred;
141};
142</pre></blockquote>
143
144<p>If this typedef were not provided, it would not be possible to
145declare <tt>pred</tt> in a way that would allow
146<tt><nobr>unary_negate</nobr></tt> to be instantiated with a function
147type (see the C++ Standard &sect;14.3.1 &para;3).
148
149<h4><tt>param_type</tt></h4>
150
151<p>This is a type suitable for passing the function or function object
152as a parameter to another function.  For example,
153
154<blockquote><pre>
155template &lt;class Predicate&gt;
156class unary_negate : // ...
157{
158  public:
159    explicit unary_negate(<strong>typename unary_traits&lt;Predicate&gt;::param_type</strong> x)
160        :
161        pred(x)
162    {}
163    // ...
164};
165</pre></blockquote>
166
167<p>Function objects are passed by reference to const; function
168pointers are passed by value.</p>
169
170
171<h3>Limitations</h3>
172
173<p>This library uses these traits within all function object adapters,
174theoretically rendering <tt><nobr>ptr_fun</nobr></tt> obsolete.
175However, third party adapters probably won't take advantage of this
176mechanism, and so <tt><nobr>ptr_fun</nobr></tt> may still be required.
177Accordingly, this library also provides <a
178href="ptr_fun.html">improved versions of the standard function pointer
179adapters</a>.</p>
180
181<p>These traits templates will also not work with compilers that fail
182to support partial specialisation of templates.  With these compilers,
183the traits templates can only be instantiated with adaptable function
184objects, thus requiring <tt><nobr>ptr_fun</nobr></tt> to be used, even
185with the function object adapters in this library.
186
187<hr>
188<p>Copyright &copy; 2000 Cadenza New Zealand Ltd.  Permission to copy,
189use, modify, sell and distribute this document is granted provided
190this copyright notice appears in all copies. This document is provided
191"as is" without express or implied warranty, and with no claim as to
192its suitability for any purpose.</p>
193
194<p>Revised 28 June 2000</p>
195</body>
196</html>
Note: See TracBrowser for help on using the repository browser.