<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <title>Class template function</title> <link rel="stylesheet" href="../boostbook.css" type="text/css"> <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"> <link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> <link rel="up" href="../function/reference.html#header.boost.function_hpp" title="Header <boost/function.hpp>"> <link rel="prev" href="functionN/sig.html" title="Struct template sig"> <link rel="next" href="function/sig.html" title="Struct template sig"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table cellpadding="2" width="100%"><tr> <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> <td align="center"><a href="../../../index.html">Home</a></td> <td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> <td align="center"><a href="../../../more/index.htm">More</a></td> </tr></table> <hr> <div class="spirit-nav"> <a accesskey="p" href="functionN/sig.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function/reference.html#header.boost.function_hpp"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="function/sig.html"><img src="../../../doc/html/images/next.png" alt="Next"></a> </div> <div class="refentry" title="Class template function"> <a name="boost.function"></a><div class="titlepage"></div> <div class="refnamediv"> <h2><span class="refentrytitle">Class template function</span></h2> <p>boost::function — A generalized function pointer that can be used for callbacks or wrapping function objects.</p> </div> <h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2> <div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis"><span class="emphasis"><em>// In header: <<a class="link" href="../function/reference.html#header.boost.function_hpp" title="Header <boost/function.hpp>">boost/function.hpp</a>> </em></span><span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature<span class="emphasis"><em> // Function type R (T1, T2, ..., TN)</em></span> > <span class="bold"><strong>class</strong></span> <a class="link" href="function.html" title="Class template function">function</a> : <span class="bold"><strong>public</strong></span> <a class="link" href="functionN.html" title="Class template functionN">functionN</a><R, T1, T2, ..., TN> { <span class="bold"><strong>public</strong></span>: <span class="emphasis"><em>// types</em></span> <span class="bold"><strong>typedef</strong></span> R <a name="boost.function.result_type"></a>result_type; <span class="bold"><strong>typedef</strong></span> T1 <a name="boost.function.argument_type"></a>argument_type; <span class="emphasis"><em>// If N == 1</em></span> <span class="bold"><strong>typedef</strong></span> T1 <a name="boost.function.first_argument_type"></a>first_argument_type; <span class="emphasis"><em>// If N == 2</em></span> <span class="bold"><strong>typedef</strong></span> T2 <a name="boost.function.second_argument_type"></a>second_argument_type; <span class="emphasis"><em>// If N == 2</em></span> <span class="bold"><strong>typedef</strong></span> T1 <a name="boost.function.arg1_type"></a>arg1_type; <span class="bold"><strong>typedef</strong></span> T2 <a name="boost.function.arg2_type"></a>arg2_type; . . . <span class="bold"><strong>typedef</strong></span> TN <a name="boost.function.argN_type"></a>argN_type; <span class="emphasis"><em>// static constants</em></span> <span class="bold"><strong>static</strong></span> <span class="bold"><strong>const</strong></span> <span class="type"><span class="bold"><strong>int</strong></span></span> arity = N; <span class="emphasis"><em>// member classes/structs/unions</em></span> <span class="emphasis"><em>// <a class="link" href="../lambda.html" title="Chapter 11. Boost.Lambda">Lambda</a> library support</em></span> <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Args> <span class="bold"><strong>struct</strong></span> <a class="link" href="function/sig.html" title="Struct template sig">sig</a> { <span class="emphasis"><em>// types</em></span> <span class="bold"><strong>typedef</strong></span> result_type <a class="link" href="function/sig.html#boost.function.sig.type">type</a>; }; <span class="emphasis"><em>// <a class="link" href="function.html#boost.functionconstruct-copy-destruct">construct/copy/destruct</a></em></span> <a class="link" href="function.html#id361349-bb">function</a>(); <a class="link" href="function.html#id577252-bb">function</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="functionN.html" title="Class template functionN">functionN</a>&); <a class="link" href="function.html#id594221-bb">function</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> F> <a class="link" href="function.html#id610126-bb">function</a>(F); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> F, <span class="bold"><strong>typename</strong></span> Allocator> <a class="link" href="function.html#id341598-bb">function</a>(F, Allocator); function& <a class="link" href="function.html#id422892-bb"><span class="bold"><strong>operator</strong></span>=</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&); function& <a class="link" href="function.html#id407481-bb"><span class="bold"><strong>operator</strong></span>=</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&); <a class="link" href="function.html#id388092-bb">~function</a>(); <span class="emphasis"><em>// <a class="link" href="function.html#id329778-bb">modifiers</a></em></span> <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="function.html#id329781-bb">swap</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&); <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="function.html#id600579-bb">clear</a>(); <span class="emphasis"><em>// <a class="link" href="function.html#id381494-bb">capacity</a></em></span> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id374989-bb">empty</a>() <span class="bold"><strong>const</strong></span>; <a class="link" href="function.html#id584819-bb"><span class="bold"><strong>operator</strong></span> safe_bool</a>() <span class="bold"><strong>const</strong></span>; <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id578440-bb"><span class="bold"><strong>operator</strong></span>!</a>() <span class="bold"><strong>const</strong></span>; <span class="emphasis"><em>// <a class="link" href="function.html#id350082-bb">target access</a></em></span> <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Functor> <span class="type">Functor*</span> <a class="link" href="function.html#id352632-bb">target</a>(); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>const</strong></span> Functor*</span> <a class="link" href="function.html#id354083-bb">target</a>() <span class="bold"><strong>const</strong></span>; <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id329689-bb">contains</a>(<span class="bold"><strong>const</strong></span> Functor&) <span class="bold"><strong>const</strong></span>; <span class="type"><span class="bold"><strong>const</strong></span> std::type_info&</span> <a class="link" href="function.html#id393598-bb">target_type</a>() <span class="bold"><strong>const</strong></span>; <span class="emphasis"><em>// <a class="link" href="function.html#id405925-bb">invocation</a></em></span> <span class="type">result_type</span> <a class="link" href="function.html#id575852-bb"><span class="bold"><strong>operator</strong></span>()</a>(arg1_type, arg2_type, ..., argN_type) <span class="bold"><strong>const</strong></span>; }; <span class="emphasis"><em>// <a class="link" href="function.html#id405794-bb">specialized algorithms</a></em></span> <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature> <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="function.html#boost.swap_id405797">swap</a>(<a class="link" href="function.html" title="Class template function">function</a><Signature>&, <a class="link" href="function.html" title="Class template function">function</a><Signature>&); <span class="emphasis"><em>// <a class="link" href="function.html#id436507-bb">comparison operators</a></em></span> <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id450151-bb"><span class="bold"><strong>operator</strong></span>==</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>&, Functor); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id585729-bb"><span class="bold"><strong>operator</strong></span>==</a>(Functor, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>&); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id442330-bb"><span class="bold"><strong>operator</strong></span>==</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>&, <a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor>); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id439104-bb"><span class="bold"><strong>operator</strong></span>==</a>(<a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor>, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>&); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature1, <span class="bold"><strong>typename</strong></span> Signature2> <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="function.html#id372098-bb"><span class="bold"><strong>operator</strong></span>==</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature1>&, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature2>&); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id356267-bb"><span class="bold"><strong>operator</strong></span>!=</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>&, Functor); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id350289-bb"><span class="bold"><strong>operator</strong></span>!=</a>(Functor, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>&); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id342580-bb"><span class="bold"><strong>operator</strong></span>!=</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>&, <a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor>); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a class="link" href="function.html#id582208-bb"><span class="bold"><strong>operator</strong></span>!=</a>(<a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor>, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>&); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature1, <span class="bold"><strong>typename</strong></span> Signature2> <span class="type"><span class="bold"><strong>void</strong></span></span> <a class="link" href="function.html#id441997-bb"><span class="bold"><strong>operator</strong></span>!=</a>(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature1>&, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature2>&);</pre></div> <div class="refsect1" title="Description"> <a name="id874705"></a><h2>Description</h2> <p>Class template <a class="link" href="function.html" title="Class template function">function</a> is a thin wrapper around the numbered class templates <a class="link" href="functionN.html" title="Class template functionN">function0</a>, <a class="link" href="functionN.html" title="Class template functionN">function1</a>, etc. It accepts a function type with N arguments and will will derive from <a class="link" href="functionN.html" title="Class template functionN">functionN</a> instantiated with the arguments it receives.</p> <p>The semantics of all operations in class template <a class="link" href="function.html" title="Class template function">function</a> are equivalent to that of the underlying <a class="link" href="functionN.html" title="Class template functionN">functionN</a> object, although additional member functions are required to allow proper copy construction and copy assignment of function objects.</p> <div class="refsect2" title="function public construct/copy/destruct"> <a name="id874765"></a><h3> <a name="boost.functionconstruct-copy-destruct"></a><code class="computeroutput">function</code> public construct/copy/destruct</h3> <div class="orderedlist"><ol class="orderedlist" type="1"> <li class="listitem"> <pre class="literallayout"><a name="id361349-bb"></a>function();</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Postconditions:</span></p></td> <td><code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code></td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><a name="id577252-bb"></a>function(<span class="bold"><strong>const</strong></span> <a class="link" href="functionN.html" title="Class template functionN">functionN</a>& f);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Postconditions:</span></p></td> <td>Contains a copy of the <code class="computeroutput">f</code>'s target, if it has one, or is empty if <code class="computeroutput">f.<a class="link" href="function.html#id374989-bb">empty</a>()</code>.</td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw unless copying the target of <code class="computeroutput">f</code> throws.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><a name="id594221-bb"></a>function(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>& f);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Postconditions:</span></p></td> <td>Contains a copy of the <code class="computeroutput">f</code>'s target, if it has one, or is empty if <code class="computeroutput">f.<a class="link" href="function.html#id374989-bb">empty</a>()</code>.</td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw unless copying the target of <code class="computeroutput">f</code> throws.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> F> <a name="id610126-bb"></a>function(F f);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Requires:</span></p></td> <td>F is a function object Callable from <code class="computeroutput">this</code>.</td> </tr> <tr> <td><p><span class="term">Postconditions:</span></p></td> <td> <code class="computeroutput">*this</code> targets a copy of <code class="computeroutput">f</code> if <code class="computeroutput">f</code> is nonempty, or <code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code> if <code class="computeroutput">f</code> is empty.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> F, <span class="bold"><strong>typename</strong></span> Allocator> <a name="id341598-bb"></a>function(F f, Allocator alloc);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Requires:</span></p></td> <td>F is a function object Callable from <code class="computeroutput">this</code>, Allocator is an allocator. The copy constructor and destructor of Allocator shall not throw.</td> </tr> <tr> <td><p><span class="term">Postconditions:</span></p></td> <td> <code class="computeroutput">*this</code> targets a copy of <code class="computeroutput">f</code> if <code class="computeroutput">f</code> is nonempty, or <code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code> if <code class="computeroutput">f</code> is empty.</td> </tr> <tr> <td><p><span class="term">Effects:</span></p></td> <td>If memory allocation is required, the given allocator (or a copy of it) will be used to allocate that memory.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout">function& <a name="id422892-bb"></a><span class="bold"><strong>operator</strong></span>=(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>& f);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> <td><p><span class="term">Postconditions:</span></p></td> <td>If copy construction does not throw, <code class="computeroutput">*this</code> targets a copy of <code class="computeroutput">f</code>'s target, if it has one, or is empty if <code class="computeroutput">f.<a class="link" href="function.html#id374989-bb">empty</a>()</code>. If copy construction does throw, <code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code>.</td> </tr></tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout">function& <a name="id407481-bb"></a><span class="bold"><strong>operator</strong></span>=(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>& f);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Postconditions:</span></p></td> <td>If copy construction of the target of <code class="computeroutput">f</code> does not throw, <code class="computeroutput">*this</code> targets a copy of <code class="computeroutput">f</code>'s target, if it has one, or is empty if <code class="computeroutput">f.<a class="link" href="function.html#id374989-bb">empty</a>()</code>. </td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw when the target of <code class="computeroutput">f</code> is a stateless function object or a reference to the function object. If copy construction does throw, <code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code>.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><a name="id388092-bb"></a>~function();</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> <td><p><span class="term">Effects:</span></p></td> <td>If <code class="computeroutput">!this-><a class="link" href="function.html#id374989-bb">empty</a>()</code>, destroys the target of <code class="computeroutput">this</code>.</td> </tr></tbody> </table></div> </li> </ol></div> </div> <div class="refsect2" title="function modifiers"> <a name="id875376"></a><h3> <a name="id329778-bb"></a><code class="computeroutput">function</code> modifiers</h3> <div class="orderedlist"><ol class="orderedlist" type="1"> <li class="listitem"> <pre class="literallayout"><span class="type"><span class="bold"><strong>void</strong></span></span> <a name="id329781-bb"></a>swap(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>& f);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> <td><p><span class="term">Effects:</span></p></td> <td>Interchanges the targets of <code class="computeroutput">*this</code> and <code class="computeroutput">f</code>.</td> </tr></tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><span class="type"><span class="bold"><strong>void</strong></span></span> <a name="id600579-bb"></a>clear();</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Postconditions:</span></p></td> <td><code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code></td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw.</td> </tr> </tbody> </table></div> </li> </ol></div> </div> <div class="refsect2" title="function capacity"> <a name="id875499"></a><h3> <a name="id381494-bb"></a><code class="computeroutput">function</code> capacity</h3> <div class="orderedlist"><ol class="orderedlist" type="1"> <li class="listitem"> <pre class="literallayout"><span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id374989-bb"></a>empty() <span class="bold"><strong>const</strong></span>;</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Returns:</span></p></td> <td> <code class="computeroutput">false</code> if <code class="computeroutput">this</code> has a target, and <code class="computeroutput">true</code> otherwise.</td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><a name="id584819-bb"></a><span class="bold"><strong>operator</strong></span> safe_bool() <span class="bold"><strong>const</strong></span>;</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Returns:</span></p></td> <td>A <code class="computeroutput">safe_bool</code> that evaluates <code class="computeroutput">false</code> in a boolean context when <code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code>, and <code class="computeroutput">true</code> otherwise.</td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id578440-bb"></a><span class="bold"><strong>operator</strong></span>!() <span class="bold"><strong>const</strong></span>;</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Returns:</span></p></td> <td><code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code></td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw.</td> </tr> </tbody> </table></div> </li> </ol></div> </div> <div class="refsect2" title="function target access"> <a name="id875709"></a><h3> <a name="id350082-bb"></a><code class="computeroutput">function</code> target access</h3> <div class="orderedlist"><ol class="orderedlist" type="1"> <li class="listitem"> <pre class="literallayout"><a name="id352629-bb"></a><span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Functor> <span class="type">Functor*</span> <a name="id352632-bb"></a>target(); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>const</strong></span> Functor*</span> <a name="id354083-bb"></a>target() <span class="bold"><strong>const</strong></span>;</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Returns:</span></p></td> <td>If <code class="computeroutput">this</code> stores a target of type <code class="computeroutput">Functor</code>, returns the address of the target. Otherwise, returns the NULL pointer.</td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id329689-bb"></a>contains(<span class="bold"><strong>const</strong></span> Functor& f) <span class="bold"><strong>const</strong></span>;</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> <td><p><span class="term">Returns:</span></p></td> <td> <code class="computeroutput">true</code> if <code class="computeroutput">this-><a class="link" href="function.html#id352629-bb">target</a><Functor>()</code> is non-NULL and <code class="computeroutput"><a class="link" href="function_equal.html" title="Function template function_equal">function_equal</a>(*(this->target<Functor>()), f)</code> </td> </tr></tbody> </table></div> </li> <li class="listitem"> <pre class="literallayout"><span class="type"><span class="bold"><strong>const</strong></span> std::type_info&</span> <a name="id393598-bb"></a>target_type() <span class="bold"><strong>const</strong></span>;</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Returns:</span></p></td> <td> <code class="computeroutput">typeid</code> of the target function object, or <code class="computeroutput">typeid(void)</code> if <code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code>.</td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td>Will not throw.</td> </tr> </tbody> </table></div> </li> </ol></div> </div> <div class="refsect2" title="function invocation"> <a name="id875978"></a><h3> <a name="id405925-bb"></a><code class="computeroutput">function</code> invocation</h3> <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> <pre class="literallayout"><span class="type">result_type</span> <a name="id575852-bb"></a><span class="bold"><strong>operator</strong></span>()(arg1_type a1, arg2_type a2, ..., argN_type aN) <span class="bold"><strong>const</strong></span>;</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Effects:</span></p></td> <td> <code class="computeroutput">f(a1, a2, ..., aN)</code>, where <code class="computeroutput">f</code> is the target of <code class="computeroutput">*this</code>.</td> </tr> <tr> <td><p><span class="term">Returns:</span></p></td> <td>if <code class="computeroutput">R</code> is <code class="computeroutput">void</code>, nothing is returned; otherwise, the return value of the call to <code class="computeroutput">f</code> is returned.</td> </tr> <tr> <td><p><span class="term">Throws:</span></p></td> <td> <code class="computeroutput"><a class="link" href="bad_function_call.html" title="Class bad_function_call">bad_function_call</a></code> if <code class="computeroutput">this-><a class="link" href="function.html#id374989-bb">empty</a>()</code>. Otherwise, may through any exception thrown by the target function <code class="computeroutput">f</code>.</td> </tr> </tbody> </table></div> </li></ol></div> </div> <div class="refsect2" title="function specialized algorithms"> <a name="id876200"></a><h3> <a name="id405794-bb"></a><code class="computeroutput">function</code> specialized algorithms</h3> <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> <pre class="literallayout"><span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature> <span class="type"><span class="bold"><strong>void</strong></span></span> <a name="boost.swap_id405797"></a>swap(<a class="link" href="function.html" title="Class template function">function</a><Signature>& f1, <a class="link" href="function.html" title="Class template function">function</a><Signature>& f2);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> <td><p><span class="term">Effects:</span></p></td> <td><code class="computeroutput">f1.<a class="link" href="function.html#id329781-bb">swap</a>(f2)</code></td> </tr></tbody> </table></div> </li></ol></div> </div> <div class="refsect2" title="function comparison operators"> <a name="id876287"></a><h3> <a name="id436507-bb"></a><code class="computeroutput">function</code> comparison operators</h3> <div class="orderedlist"><ol class="orderedlist" type="1"> <li class="listitem"> <p><a name="boost.operator==_id450148"></a></p> <pre class="literallayout"><span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id450151-bb"></a><span class="bold"><strong>operator</strong></span>==(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>& f, Functor g); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id585729-bb"></a><span class="bold"><strong>operator</strong></span>==(Functor g, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>& f); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id442330-bb"></a><span class="bold"><strong>operator</strong></span>==(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>& f, <a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor> g); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id439104-bb"></a><span class="bold"><strong>operator</strong></span>==(<a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor> g, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>& f); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature1, <span class="bold"><strong>typename</strong></span> Signature2> <span class="type"><span class="bold"><strong>void</strong></span></span> <a name="id372098-bb"></a><span class="bold"><strong>operator</strong></span>==(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature1>& f1, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature2>& f2);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Returns:</span></p></td> <td>True when <code class="computeroutput">f</code> stores an object of type <code class="computeroutput">Functor</code> and one of the following conditions applies: <div class="itemizedlist"><ul class="itemizedlist" type="disc"> <li class="listitem"> <code class="computeroutput">g</code> is of type <code class="computeroutput"><a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor></code> and <code class="computeroutput">f.target<Functor>() == g.<a class="link" href="reference_wrapper.html#id1144421-bb">get_pointer</a>()</code>.</li> <li class="listitem"> <code class="computeroutput">g</code> is not of type <code class="computeroutput"><a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor></code> and <code class="computeroutput">function_equals(*(f.target<Functor>()), g)</code>.</li> </ul></div> </td> </tr> <tr> <td><p><span class="term">Notes:</span></p></td> <td> <code class="computeroutput"><a class="link" href="function.html" title="Class template function">function</a></code> objects are not <a class="link" href="../EqualityComparable.html" title="Concept EqualityComparable">EqualityComparable</a>.</td> </tr> <tr> <td><p><span class="term">Rationale:</span></p></td> <td>The <code class="computeroutput">safe_bool</code> conversion opens a loophole whereby two <code class="computeroutput">function</code> instances can be compared via <code class="computeroutput">==</code>, although this is not feasible to implement. The undefined <code class="computeroutput">void operator==</code> closes the loophole and ensures a compile-time or link-time error.</td> </tr> </tbody> </table></div> </li> <li class="listitem"> <p><a name="boost.operator!=_id356264"></a></p> <pre class="literallayout"><span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id356267-bb"></a><span class="bold"><strong>operator</strong></span>!=(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>& f, Functor g); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id350289-bb"></a><span class="bold"><strong>operator</strong></span>!=(Functor g, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>& f); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id342580-bb"></a><span class="bold"><strong>operator</strong></span>!=(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>& f, <a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor> g); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor> <span class="type"><span class="bold"><strong>bool</strong></span></span> <a name="id582208-bb"></a><span class="bold"><strong>operator</strong></span>!=(<a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor> g, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature>& f); <span class="bold"><strong>template</strong></span><<span class="bold"><strong>typename</strong></span> Signature1, <span class="bold"><strong>typename</strong></span> Signature2> <span class="type"><span class="bold"><strong>void</strong></span></span> <a name="id441997-bb"></a><span class="bold"><strong>operator</strong></span>!=(<span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature1>& f1, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a><Signature2>& f2);</pre> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> <tr> <td><p><span class="term">Returns:</span></p></td> <td>True when <code class="computeroutput">f</code> does not store an object of type <code class="computeroutput">Functor</code> or it stores an object of type <code class="computeroutput">Functor</code> and one of the following conditions applies: <div class="itemizedlist"><ul class="itemizedlist" type="disc"> <li class="listitem"> <code class="computeroutput">g</code> is of type <code class="computeroutput"><a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor></code> and <code class="computeroutput">f.target<Functor>() != g.<a class="link" href="reference_wrapper.html#id1144421-bb">get_pointer</a>()</code>.</li> <li class="listitem"> <code class="computeroutput">g</code> is not of type <code class="computeroutput"><a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a><Functor></code> and <code class="computeroutput">!function_equals(*(f.target<Functor>()), g)</code>.</li> </ul></div> </td> </tr> <tr> <td><p><span class="term">Notes:</span></p></td> <td> <code class="computeroutput"><a class="link" href="function.html" title="Class template function">function</a></code> objects are not <a class="link" href="../EqualityComparable.html" title="Concept EqualityComparable">EqualityComparable</a>.</td> </tr> <tr> <td><p><span class="term">Rationale:</span></p></td> <td>The <code class="computeroutput">safe_bool</code> conversion opens a loophole whereby two <code class="computeroutput">function</code> instances can be compared via <code class="computeroutput">!=</code>, although this is not feasible to implement. The undefined <code class="computeroutput">void operator!=</code> closes the loophole and ensures a compile-time or link-time error.</td> </tr> </tbody> </table></div> </li> </ol></div> </div> </div> </div> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <td align="left"></td> <td align="right"><div class="copyright-footer">Copyright © 2001-2004 Douglas Gregor<p>Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file <code class="filename">LICENSE_1_0.txt</code> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)</p> </div></td> </tr></table> <hr> <div class="spirit-nav"> <a accesskey="p" href="functionN/sig.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function/reference.html#header.boost.function_hpp"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="function/sig.html"><img src="../../../doc/html/images/next.png" alt="Next"></a> </div> </body> </html>