Sophie

Sophie

distrib > Mandriva > 2010.1 > x86_64 > by-pkgid > fa7fad8f194f80107561a85291acd153 > files > 828

lib64boost-devel-doc-1.42.0-3mdv2010.1.x86_64.rpm

<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 &lt;boost/function.hpp&gt;">
<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 &#8212; 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: &lt;<a class="link" href="../function/reference.html#header.boost.function_hpp" title="Header &lt;boost/function.hpp&gt;">boost/function.hpp</a>&gt;

</em></span><span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature<span class="emphasis"><em>  // Function type R (T1, T2, ..., TN)</em></span>
         &gt; 
<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>&lt;R, T1, T2, ..., TN&gt; {
<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&#160;11.&#160;Boost.Lambda">Lambda</a> library support</em></span>  <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Args&gt; 
  <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>&amp;);
  <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>&amp;);
  <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> F&gt; <a class="link" href="function.html#id610126-bb">function</a>(F);
  <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> F, <span class="bold"><strong>typename</strong></span> Allocator&gt; <a class="link" href="function.html#id341598-bb">function</a>(F, Allocator);
  function&amp; <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>&amp;);
  function&amp; <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>&amp;);
  <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>&amp;);
  <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>&lt;<span class="bold"><strong>typename</strong></span> Functor&gt; <span class="type">Functor*</span> <a class="link" href="function.html#id352632-bb">target</a>();
  <span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Functor&gt; <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>&lt;<span class="bold"><strong>typename</strong></span> Functor&gt; <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&amp;) <span class="bold"><strong>const</strong></span>;
  <span class="type"><span class="bold"><strong>const</strong></span> std::type_info&amp;</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>&lt;<span class="bold"><strong>typename</strong></span> Signature&gt; 
  <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>&lt;Signature&gt;&amp;, <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature&gt;&amp;);

<span class="emphasis"><em>// <a class="link" href="function.html#id436507-bb">comparison operators</a></em></span>
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp;, Functor);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp;, <a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a>&lt;Functor&gt;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Functor&gt;, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature&gt;&amp;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature1, <span class="bold"><strong>typename</strong></span> Signature2&gt; 
  <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>&lt;Signature1&gt;&amp;, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature2&gt;&amp;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp;, Functor);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp;, <a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a>&lt;Functor&gt;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Functor&gt;, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature&gt;&amp;);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature1, <span class="bold"><strong>typename</strong></span> Signature2&gt; 
  <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>&lt;Signature1&gt;&amp;, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature2&gt;&amp;);</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-&gt;<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>&amp; 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>&amp; 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>&lt;<span class="bold"><strong>typename</strong></span> F&gt; <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-&gt;<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>&lt;<span class="bold"><strong>typename</strong></span> F, <span class="bold"><strong>typename</strong></span> Allocator&gt; <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-&gt;<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&amp; <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>&amp; 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-&gt;<a class="link" href="function.html#id374989-bb">empty</a>()</code>.</td>
</tr></tbody>
</table></div>
</li>
<li class="listitem">
<pre class="literallayout">function&amp; <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>&amp; 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-&gt;<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-&gt;<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>&amp; 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-&gt;<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-&gt;<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-&gt;<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>&lt;<span class="bold"><strong>typename</strong></span> Functor&gt; <span class="type">Functor*</span> <a name="id352632-bb"></a>target();
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Functor&gt; <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>&lt;<span class="bold"><strong>typename</strong></span> Functor&gt; <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&amp; 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-&gt;<a class="link" href="function.html#id352629-bb">target</a>&lt;Functor&gt;()</code> is non-NULL and <code class="computeroutput"><a class="link" href="function_equal.html" title="Function template function_equal">function_equal</a>(*(this-&gt;target&lt;Functor&gt;()), 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&amp;</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-&gt;<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-&gt;<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>&lt;<span class="bold"><strong>typename</strong></span> Signature&gt; 
  <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>&lt;Signature&gt;&amp; f1, <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature&gt;&amp; 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>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp; f, Functor g);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp; f);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp; f, <a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a>&lt;Functor&gt; g);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Functor&gt; g, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature&gt;&amp; f);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature1, <span class="bold"><strong>typename</strong></span> Signature2&gt; 
  <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>&lt;Signature1&gt;&amp; f1, 
                  <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature2&gt;&amp; 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>&lt;Functor&gt;</code>
            and <code class="computeroutput">f.target&lt;Functor&gt;() == 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>&lt;Functor&gt;</code>
            and <code class="computeroutput">function_equals(*(f.target&lt;Functor&gt;()), 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>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp; f, Functor g);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp; f);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Signature&gt;&amp; f, <a class="link" href="reference_wrapper.html" title="Class template reference_wrapper">reference_wrapper</a>&lt;Functor&gt; g);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature, <span class="bold"><strong>typename</strong></span> Functor&gt; 
  <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>&lt;Functor&gt; g, <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature&gt;&amp; f);
<span class="bold"><strong>template</strong></span>&lt;<span class="bold"><strong>typename</strong></span> Signature1, <span class="bold"><strong>typename</strong></span> Signature2&gt; 
  <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>&lt;Signature1&gt;&amp; f1, 
                  <span class="bold"><strong>const</strong></span> <a class="link" href="function.html" title="Class template function">function</a>&lt;Signature2&gt;&amp; 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>&lt;Functor&gt;</code>
            and <code class="computeroutput">f.target&lt;Functor&gt;() != 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>&lt;Functor&gt;</code>
            and <code class="computeroutput">!function_equals(*(f.target&lt;Functor&gt;()), 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 &#169; 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>