123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <meta http-equiv="Content-Language" content="en-us">
- <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
- <title>Boost Function Object Adapter Library</title>
- </head>
- <body bgcolor="#FFFFFF" text="#000000">
- <table border="1" bgcolor="#007F7F" cellpadding="2" summary="">
- <tr>
- <td bgcolor="#FFFFFF"><img src="../../boost.png" alt=
- "boost.png (6897 bytes)" width="277" height="86"></td>
- <td><a href="../../index.htm"><font face="Arial" color=
- "#FFFFFF"><big>Home</big></font></a></td>
- <td><a href="../libraries.htm"><font face="Arial" color=
- "#FFFFFF"><big>Libraries</big></font></a></td>
- <td><a href="http://www.boost.org/people/people.htm"><font face="Arial" color=
- "#FFFFFF"><big>People</big></font></a></td>
- <td><a href="http://www.boost.org/more/faq.htm"><font face="Arial" color=
- "#FFFFFF"><big>FAQ</big></font></a></td>
- <td><a href="../../more/index.htm"><font face="Arial" color=
- "#FFFFFF"><big>More</big></font></a></td>
- </tr>
- </table>
- <h1>Function Object Traits</h1>
- <p>The header <a href="../../boost/functional.hpp">functional.hpp</a>
- provides two traits class templates for functions and function objects:</p>
- <table border="1" summary="">
- <tr>
- <th>Type</th>
- <th>Contents</th>
- <th>Description</th>
- </tr>
- <tr>
- <td valign="top" rowspan="4">
- <tt>template <typename T><br>
- struct unary_traits</tt></td>
- <td valign="top"><tt>function_type</tt></td>
- <td valign="top">The type of the function or function object itself
- (i.e., <tt>T</tt>).</td>
- </tr>
- <tr>
- <td valign="top"><tt>param_type</tt></td>
- <td valign="top">The type that should be used to pass the function or
- function object as a parameter.</td>
- </tr>
- <tr>
- <td valign="top"><tt>result_type</tt></td>
- <td valign="top">The type returned by the function or function
- object.</td>
- </tr>
- <tr>
- <td valign="top"><tt>argument_type</tt></td>
- <td valign="top">The type of the argument to the function or function
- object.</td>
- </tr>
- <tr>
- <td valign="top" rowspan="5">
- <tt>template <typename T><br>
- struct binary_traits</tt></td>
- <td valign="top"><tt>function_type</tt></td>
- <td valign="top">The type of the function or function object itself
- (i.e., <tt>T</tt>).</td>
- </tr>
- <tr>
- <td valign="top"><tt>param_type</tt></td>
- <td valign="top">The type that should be used to pass the function or
- function object as a parameter.</td>
- </tr>
- <tr>
- <td valign="top"><tt>result_type</tt></td>
- <td valign="top">The type returned by the function or function
- object.</td>
- </tr>
- <tr>
- <td valign="top"><tt>first_argument_type</tt></td>
- <td valign="top">The type of the first argument to the function or
- function object.</td>
- </tr>
- <tr>
- <td valign="top"><tt>second_argument_type</tt></td>
- <td valign="top">The type of the second argument to the function or
- function object.</td>
- </tr>
- </table>
- <h3>Usage</h3>
- <p><tt>unary_traits</tt> should be instantiated with either a function
- taking a single parameter, or an adaptable unary function object (i.e., a
- class derived from <tt>std::unary_function</tt> or one which provides the
- same typedefs). (See §20.3.1 in the C++ Standard.)</p>
- <p><tt>binary_traits</tt> should be instantiated with either a function
- taking two parameters, or an adaptable binary function object (i.e., a
- class derived from <tt>std::binary_function</tt> or one which provides the
- same typedefs). (See §20.3.1 in the C++ Standard.)</p>
- <p>The most common usage of these templates is in function object adapters,
- thus allowing them to adapt plain functions as well as function objects.
- You can do this by wherever you would normally write, for example,</p>
- <blockquote>
- <pre>
- typename Operation::argument_type
- </pre>
- </blockquote>
- <p>simply writing</p>
- <blockquote>
- <pre>
- typename boost::unary_traits<Operation>::argument_type
- </pre>
- </blockquote>
- <p>instead.</p>
- <h3>Additional Types Defined</h3>
- <p>In addition to the standard result and argument typedefs, these traits
- templates define two additional types.</p>
- <h4><tt>function_type</tt></h4>
- <p>This is the type of the function or function object, and can be used in
- declarations such as</p>
- <blockquote>
- <pre>
- template <class Predicate>
- class unary_negate : // ...
- {
- // ...
- private:
- <strong>typename unary_traits<Predicate>::function_type</strong> pred;
- };
- </pre>
- </blockquote>
- <p>If this typedef were not provided, it would not be possible to declare
- <tt>pred</tt> in a way that would allow <tt>unary_negate</tt> to be
- instantiated with a function type (see the C++ Standard §14.3.1
- ¶3).</p>
- <h4><tt>param_type</tt></h4>
- <p>This is a type suitable for passing the function or function object as a
- parameter to another function. For example,</p>
- <blockquote>
- <pre>
- template <class Predicate>
- class unary_negate : // ...
- {
- public:
- explicit unary_negate(<strong>typename unary_traits<Predicate>::param_type</strong> x)
- :
- pred(x)
- {}
- // ...
- };
- </pre>
- </blockquote>
- <p>Function objects are passed by reference to const; function pointers are
- passed by value.</p>
- <h3>Limitations</h3>
- <p>This library uses these traits within all function object adapters,
- theoretically rendering <tt>ptr_fun</tt> obsolete. However, third party
- adapters probably won't take advantage of this mechanism, and so
- <tt>ptr_fun</tt> may still be required. Accordingly, this library also
- provides <a href="ptr_fun.html">improved versions of the standard function
- pointer adapters</a>.</p>
- <p>These traits templates will also not work with compilers that fail to
- support partial specialisation of templates. With these compilers, the
- traits templates can only be instantiated with adaptable function objects,
- thus requiring <tt>ptr_fun</tt> to be used, even with the function object
- adapters in this library.</p>
- <hr>
- <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
- "../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional"
- height="31" width="88"></a></p>
- <p>Revised
- <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->02
- December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38510" --></p>
- <p><i>Copyright © 2000 Cadenza New Zealand Ltd.</i></p>
- <p><i>Distributed under the Boost Software License, Version 1.0. (See
- accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
- copy at <a href=
- "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
- </body>
- </html>
|