1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>fused_procedure</title> 5<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../../index.html" title="Chapter 1. Fusion 2.2"> 8<link rel="up" href="../adapters.html" title="Adapters"> 9<link rel="prev" href="fused.html" title="fused"> 10<link rel="next" href="fused_function_object.html" title="fused_function_object"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="fused.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapters.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="fused_function_object.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h4 class="title"> 27<a name="fusion.functional.adapters.fused_procedure"></a><a class="link" href="fused_procedure.html" title="fused_procedure">fused_procedure</a> 28</h4></div></div></div> 29<h6> 30<a name="fusion.functional.adapters.fused_procedure.h0"></a> 31 <span class="phrase"><a name="fusion.functional.adapters.fused_procedure.description"></a></span><a class="link" href="fused_procedure.html#fusion.functional.adapters.fused_procedure.description">Description</a> 32 </h6> 33<p> 34 An unary <a class="link" href="../concepts/poly.html" title="Polymorphic Function Object">Polymorphic Function 35 Object</a> adapter template for <a class="link" href="../concepts/callable.html" title="Callable Object">Callable 36 Object</a> target functions. It takes a <a class="link" href="../../sequence/concepts/forward_sequence.html" title="Forward Sequence">Forward 37 Sequence</a> that contains the arguments for the target function. 38 </p> 39<p> 40 The result is discarded and the adapter's return type is <code class="computeroutput"><span class="keyword">void</span></code>. 41 </p> 42<p> 43 The type of the target function is allowed to be const qualified or a reference. 44 Const qualification is preserved and propagated appropriately (in other 45 words, only const versions of <code class="literal">operator()</code> can be used 46 for a target function object that is const or, if the target function object 47 is held by value, the adapter is const - these semantics have nothing to 48 do with the const qualification of a member function, which is referring 49 to the type of object pointed to by <code class="literal">this</code> which is specified 50 with the first element in the sequence passed to the adapter). 51 </p> 52<p> 53 If the target function is a pointer to a members function, the corresponding 54 object can be specified as a reference, pointer, or smart pointer. In case 55 of the latter, a freestanding <code class="literal">get_pointer</code> function must 56 be defined (Boost provides this function for <code class="literal">std::auto_ptr</code> 57 and <a href="http://www.boost.org/libs/smart_ptr#shared_ptr" target="_top"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span></code></a>). 58 </p> 59<p> 60 The target function must not be a pointer to a member object (dereferencing 61 such a pointer without returning anything does not make sense, so this 62 case is not implemented). 63 </p> 64<h6> 65<a name="fusion.functional.adapters.fused_procedure.h1"></a> 66 <span class="phrase"><a name="fusion.functional.adapters.fused_procedure.header"></a></span><a class="link" href="fused_procedure.html#fusion.functional.adapters.fused_procedure.header">Header</a> 67 </h6> 68<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">functional</span><span class="special">/</span><span class="identifier">adapter</span><span class="special">/</span><span class="identifier">fused_procedure</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 69</pre> 70<h6> 71<a name="fusion.functional.adapters.fused_procedure.h2"></a> 72 <span class="phrase"><a name="fusion.functional.adapters.fused_procedure.synopsis"></a></span><a class="link" href="fused_procedure.html#fusion.functional.adapters.fused_procedure.synopsis">Synopsis</a> 73 </h6> 74<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Function</span><span class="special">></span> 75<span class="keyword">class</span> <span class="identifier">fused_procedure</span><span class="special">;</span> 76</pre> 77<h6> 78<a name="fusion.functional.adapters.fused_procedure.h3"></a> 79 <span class="phrase"><a name="fusion.functional.adapters.fused_procedure.template_parameters"></a></span><a class="link" href="fused_procedure.html#fusion.functional.adapters.fused_procedure.template_parameters">Template 80 parameters</a> 81 </h6> 82<div class="informaltable"><table class="table"> 83<colgroup> 84<col> 85<col> 86<col> 87</colgroup> 88<thead><tr> 89<th> 90 <p> 91 Parameter 92 </p> 93 </th> 94<th> 95 <p> 96 Description 97 </p> 98 </th> 99<th> 100 <p> 101 Default 102 </p> 103 </th> 104</tr></thead> 105<tbody><tr> 106<td> 107 <p> 108 <code class="computeroutput"><span class="identifier">Function</span></code> 109 </p> 110 </td> 111<td> 112 <p> 113 <a class="link" href="../concepts/callable.html" title="Callable Object">Callable 114 Object</a> type 115 </p> 116 </td> 117<td> 118 </td> 119</tr></tbody> 120</table></div> 121<h6> 122<a name="fusion.functional.adapters.fused_procedure.h4"></a> 123 <span class="phrase"><a name="fusion.functional.adapters.fused_procedure.model_of"></a></span><a class="link" href="fused_procedure.html#fusion.functional.adapters.fused_procedure.model_of">Model of</a> 124 </h6> 125<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 126<li class="listitem"> 127 <a class="link" href="../concepts/poly.html" title="Polymorphic Function Object">Polymorphic Function 128 Object</a> 129 </li> 130<li class="listitem"> 131 <a class="link" href="../concepts/def_callable.html" title="Deferred Callable Object">Deferred Callable 132 Object</a> 133 </li> 134</ul></div> 135<div class="variablelist"> 136<p class="title"><b>Notation</b></p> 137<dl class="variablelist"> 138<dt><span class="term"><code class="computeroutput"><span class="identifier">R</span></code></span></dt> 139<dd><p> 140 A possibly const qualified <a class="link" href="../concepts/callable.html" title="Callable Object">Callable 141 Object</a> type or reference type thereof 142 </p></dd> 143<dt><span class="term"><code class="computeroutput"><span class="identifier">r</span></code></span></dt> 144<dd><p> 145 An object convertible to <code class="computeroutput"><span class="identifier">R</span></code> 146 </p></dd> 147<dt><span class="term"><code class="computeroutput"><span class="identifier">s</span></code></span></dt> 148<dd><p> 149 A <a class="link" href="../../sequence.html" title="Sequence">Sequence</a> of arguments that 150 are accepted by <code class="computeroutput"><span class="identifier">r</span></code> 151 </p></dd> 152<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code></span></dt> 153<dd><p> 154 An instance of <code class="computeroutput"><span class="identifier">fused_procedure</span><span class="special"><</span><span class="identifier">R</span><span class="special">></span></code> 155 </p></dd> 156</dl> 157</div> 158<h6> 159<a name="fusion.functional.adapters.fused_procedure.h5"></a> 160 <span class="phrase"><a name="fusion.functional.adapters.fused_procedure.expression_semantics"></a></span><a class="link" href="fused_procedure.html#fusion.functional.adapters.fused_procedure.expression_semantics">Expression 161 Semantics</a> 162 </h6> 163<div class="informaltable"><table class="table"> 164<colgroup> 165<col> 166<col> 167</colgroup> 168<thead><tr> 169<th> 170 <p> 171 Expression 172 </p> 173 </th> 174<th> 175 <p> 176 Semantics 177 </p> 178 </th> 179</tr></thead> 180<tbody> 181<tr> 182<td> 183 <p> 184 <code class="computeroutput"><span class="identifier">fused_procedure</span><span class="special"><</span><span class="identifier">R</span><span class="special">>(</span><span class="identifier">r</span><span class="special">)</span></code> 185 </p> 186 </td> 187<td> 188 <p> 189 Creates a fused function as described above, initializes the 190 target function with <code class="computeroutput"><span class="identifier">r</span></code>. 191 </p> 192 </td> 193</tr> 194<tr> 195<td> 196 <p> 197 <code class="computeroutput"><span class="identifier">fused_procedure</span><span class="special"><</span><span class="identifier">R</span><span class="special">>()</span></code> 198 </p> 199 </td> 200<td> 201 <p> 202 Creates a fused function as described above, attempts to use 203 <code class="computeroutput"><span class="identifier">R</span></code>'s default constructor. 204 </p> 205 </td> 206</tr> 207<tr> 208<td> 209 <p> 210 <code class="computeroutput"><span class="identifier">f</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> 211 </p> 212 </td> 213<td> 214 <p> 215 Calls <code class="computeroutput"><span class="identifier">r</span></code> with 216 the elements in <code class="computeroutput"><span class="identifier">s</span></code> 217 as its arguments. 218 </p> 219 </td> 220</tr> 221</tbody> 222</table></div> 223<h6> 224<a name="fusion.functional.adapters.fused_procedure.h6"></a> 225 <span class="phrase"><a name="fusion.functional.adapters.fused_procedure.example"></a></span><a class="link" href="fused_procedure.html#fusion.functional.adapters.fused_procedure.example">Example</a> 226 </h6> 227<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">SequenceOfSequences</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Func</span><span class="special">></span> 228<span class="keyword">void</span> <span class="identifier">n_ary_for_each</span><span class="special">(</span><span class="identifier">SequenceOfSequences</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">Func</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">f</span><span class="special">)</span> 229<span class="special">{</span> 230 <a class="link" href="../../algorithm/iteration/functions/for_each.html" title="for_each"><code class="computeroutput"><span class="identifier">for_each</span></code></a><span class="special">(</span><a class="link" href="../../view/zip_view.html" title="zip_view"><code class="computeroutput"><span class="identifier">zip_view</span></code></a><span class="special"><</span><span class="identifier">SequenceOfSequences</span><span class="special">>(</span><span class="identifier">s</span><span class="special">),</span> 231 <span class="identifier">fused_procedure</span><span class="special"><</span><span class="identifier">Func</span> <span class="keyword">const</span> <span class="special">&>(</span><span class="identifier">f</span><span class="special">));</span> 232<span class="special">}</span> 233 234<span class="keyword">void</span> <span class="identifier">try_it</span><span class="special">()</span> 235<span class="special">{</span> 236 <a class="link" href="../../container/vector.html" title="vector"><code class="computeroutput"><span class="identifier">vector</span></code></a><span class="special"><</span><span class="keyword">int</span><span class="special">,</span><span class="keyword">float</span><span class="special">></span> <span class="identifier">a</span><span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="number">2.0f</span><span class="special">);</span> 237 <a class="link" href="../../container/vector.html" title="vector"><code class="computeroutput"><span class="identifier">vector</span></code></a><span class="special"><</span><span class="keyword">int</span><span class="special">,</span><span class="keyword">float</span><span class="special">></span> <span class="identifier">b</span><span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">1.5f</span><span class="special">);</span> 238 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">;</span> 239 <span class="identifier">n_ary_for_each</span><span class="special">(</span><a class="link" href="../../container/generation/functions/vector_tie.html" title="vector_tie"><code class="computeroutput"><span class="identifier">vector_tie</span></code></a><span class="special">(</span><span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">),</span> <span class="identifier">_1</span> <span class="special">-=</span> <span class="identifier">_2</span><span class="special">);</span> 240 <span class="identifier">assert</span><span class="special">(</span><span class="identifier">a</span> <span class="special">==</span> <a class="link" href="../../container/generation/functions/make_vector.html" title="make_vector"><code class="computeroutput"><span class="identifier">make_vector</span></code></a><span class="special">(</span><span class="number">1</span><span class="special">,</span><span class="number">0.5f</span><span class="special">));</span> 241<span class="special">}</span> 242</pre> 243<h6> 244<a name="fusion.functional.adapters.fused_procedure.h7"></a> 245 <span class="phrase"><a name="fusion.functional.adapters.fused_procedure.see_also"></a></span><a class="link" href="fused_procedure.html#fusion.functional.adapters.fused_procedure.see_also">See also</a> 246 </h6> 247<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 248<li class="listitem"> 249 <a class="link" href="fused.html" title="fused"><code class="computeroutput"><span class="identifier">fused</span></code></a> 250 </li> 251<li class="listitem"> 252 <a class="link" href="fused_function_object.html" title="fused_function_object"><code class="computeroutput"><span class="identifier">fused_function_object</span></code></a> 253 </li> 254<li class="listitem"> 255 <a class="link" href="../invocation/functions/invoke_proc.html" title="invoke_procedure"><code class="computeroutput"><span class="identifier">invoke_procedure</span></code></a> 256 </li> 257<li class="listitem"> 258 <a class="link" href="../generation/functions/mk_fused_proc.html" title="make_fused_procedure"><code class="computeroutput"><span class="identifier">make_fused_procedure</span></code></a> 259 </li> 260</ul></div> 261</div> 262<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 263<td align="left"></td> 264<td align="right"><div class="copyright-footer">Copyright © 2001-2006, 2011, 2012 Joel de Guzman, 265 Dan Marsden, Tobias Schwinger<p> 266 Distributed under the Boost Software License, Version 1.0. (See accompanying 267 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 268 </p> 269</div></td> 270</tr></table> 271<hr> 272<div class="spirit-nav"> 273<a accesskey="p" href="fused.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../adapters.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="fused_function_object.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> 274</div> 275</body> 276</html> 277