Files
boost_fusion/doc/html/fusion/functional.html
T
Eric Niebler 5b6d08974e Merged revisions 40861-40888 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r40862 | dave | 2007-11-06 15:39:09 -0800 (Tue, 06 Nov 2007) | 2 lines
  
  Added missing copyright/license
........
  r40863 | djowel | 2007-11-06 18:12:28 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40864 | aaron_windsor | 2007-11-06 18:30:38 -0800 (Tue, 06 Nov 2007) | 1 line
  
  Shortening file name of a graph test to < 32 characters
........
  r40865 | djowel | 2007-11-06 18:34:18 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added license info in copyright notice at the footer
........
  r40866 | djowel | 2007-11-06 19:06:23 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added license info in copyright notice at the footer
........
  r40867 | djowel | 2007-11-06 19:23:31 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added license info in copyright notice at the footer
........
  r40868 | djowel | 2007-11-06 19:25:59 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40869 | djowel | 2007-11-06 19:27:38 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added license info in copyright notice at the footer
........
  r40870 | djowel | 2007-11-06 19:30:01 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40871 | djowel | 2007-11-06 19:35:49 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40872 | djowel | 2007-11-06 19:37:51 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40873 | djowel | 2007-11-06 19:46:23 -0800 (Tue, 06 Nov 2007) | 1 line
  
  added copyright and license info for each page.
........
  r40874 | chris_kohlhoff | 2007-11-06 22:49:36 -0800 (Tue, 06 Nov 2007) | 2 lines
  
  Add copyright notice.
........
  r40875 | chris_kohlhoff | 2007-11-06 22:53:17 -0800 (Tue, 06 Nov 2007) | 2 lines
  
  Add myself as asio maintainer.
........
  r40876 | chris_kohlhoff | 2007-11-06 23:23:53 -0800 (Tue, 06 Nov 2007) | 2 lines
  
  Add asio.
........
  r40877 | joaquin | 2007-11-07 00:45:27 -0800 (Wed, 07 Nov 2007) | 1 line
  
  reapplied change at rev 40284
........
  r40878 | johnmaddock | 2007-11-07 02:07:08 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Ooops, got the pp-logic wrong and disable long double support for all Unix platforms, instead of just Intel on Linux prior to version 10.
........
  r40879 | johnmaddock | 2007-11-07 02:09:50 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Fix calls to fpclassify so they don't trigger macro expansion when fpclassify is a macro.
........
  r40880 | t_schwinger | 2007-11-07 02:14:42 -0800 (Wed, 07 Nov 2007) | 3 lines
  
  adds FunctionTypes
........
  r40881 | johnmaddock | 2007-11-07 03:50:02 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Change test (again) so that the range of values tested matches original test: last change started testing more extreme input values, which caused regressions on Mac OS X.
........
  r40882 | johnmaddock | 2007-11-07 03:59:39 -0800 (Wed, 07 Nov 2007) | 3 lines
  
  Disabled use of long double when BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS is defined.
  Disabled special-double precision error rates when BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS is defined.
........
  r40883 | johnmaddock | 2007-11-07 04:04:01 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Oops get the name of test right!
........
  r40884 | anthonyw | 2007-11-07 04:10:17 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added missing licence and copyright
........
  r40885 | garcia | 2007-11-07 04:25:16 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  added logging library.
........
  r40886 | garcia | 2007-11-07 05:38:53 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  Exception was accepted.
........
  r40887 | fcacciola | 2007-11-07 06:12:15 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added explicit failures for newly discovered GCC const ref binding bug (see Ticket #1301)
........


[SVN r40891]
2007-11-07 16:22:38 +00:00

165 lines
9.7 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Functional</title>
<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter 1. Fusion 2.0">
<link rel="up" href="../index.html" title="Chapter 1. Fusion 2.0">
<link rel="prev" href="extension/macros/adapt_assoc.html" title=" BOOST_FUSION_ADAPT_ASSOC_STRUCT">
<link rel="next" href="functional/concepts.html" title="Concepts">
</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.htm">Home</a></td>
<td align="center"><a href="../../../../libraries.htm">Libraries</a></td>
<td align="center"><a href="../../../../../people/people.htm">People</a></td>
<td align="center"><a href="../../../../../more/faq.htm">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="extension/macros/adapt_assoc.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><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="functional/concepts.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="fusion.functional"></a><a href="functional.html" title="Functional">Functional</a></h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section"><a href="functional/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="functional/concepts/callable.html"> Callable Object</a></span></dt>
<dt><span class="section"><a href="functional/concepts/reg_callable.html"> Regular Callable
Object</a></span></dt>
<dt><span class="section"><a href="functional/concepts/def_callable.html"> Deferred
Callable Object</a></span></dt>
<dt><span class="section"><a href="functional/concepts/poly.html"> Polymorphic Function
Object</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="functional/invocation.html">Invocation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="functional/invocation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="functional/invocation/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="functional/adapters.html"> Adapters</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="functional/adapters/fused.html">fused</a></span></dt>
<dt><span class="section"><a href="functional/adapters/fused_procedure.html">fused_procedure</a></span></dt>
<dt><span class="section"><a href="functional/adapters/fused_function_object.html">fused_function_object</a></span></dt>
<dt><span class="section"><a href="functional/adapters/unfused_generic.html">unfused_generic</a></span></dt>
<dt><span class="section"><a href="functional/adapters/unfused_lvalue_args.html">unfused_lvalue_args</a></span></dt>
<dt><span class="section"><a href="functional/adapters/unfused_rvalue_args.html">unfused_rvalue_args</a></span></dt>
<dt><span class="section"><a href="functional/adapters/unfused_typed.html">unfused_typed</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="functional/generation.html">Generation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="functional/generation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="functional/generation/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
</dl></div>
<p>
Components to call functions and function objects and to make Fusion code callable
through a function object interface.
</p>
<p>
/functional.hpp&gt;
</p>
<a name="fusion.functional.fused_and_unfused_forms"></a><h3>
<a name="id651444"></a>
<a href="functional.html#fusion.functional.fused_and_unfused_forms">Fused and unfused
forms</a>
</h3>
<p>
What is a function call?
</p>
<pre class="programlisting">
<span class="identifier">f</span> <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">c</span><span class="special">)</span>
</pre>
<p>
It is a name and a tuple written next to each other, left-to-right.
</p>
<p>
Although the C++ syntax does not allow to replace <tt class="literal">(a,b,c)</tt>
with some Fusion <a href="sequence.html" title="Sequence">Sequence</a>, introducing
yet another function provides a solution:
</p>
<pre class="programlisting">
<span class="identifier">invoke</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span><span class="identifier">my_sequence</span><span class="special">)</span>
</pre>
<p>
Alternatively it is possible to apply a simple transformation to <tt class="literal">f</tt>
in order to achieve the same effect:
</p>
<pre class="programlisting">
<span class="identifier">f</span> <span class="identifier">tuple</span> <span class="special">&lt;=&gt;</span> f' <span class="special">(</span><span class="identifier">tuple</span><span class="special">)</span>
</pre>
<p>
Now, <tt class="literal">f'</tt> is an unary function that takes the arguments to
<tt class="computeroutput"><span class="identifier">f</span></tt> as a tuple; <tt class="literal">f'</tt>
is the <span class="emphasis"><em>fused</em></span> form of <tt class="computeroutput"><span class="identifier">f</span></tt>.
Reading the above equivalence right-to-left to get the inverse transformation,
<tt class="computeroutput"><span class="identifier">f</span></tt> is the <span class="emphasis"><em>unfused</em></span>
form of <tt class="literal">f'</tt>.
</p>
<a name="fusion.functional.calling_functions_and_function_objects"></a><h3>
<a name="id651709"></a>
<a href="functional.html#fusion.functional.calling_functions_and_function_objects">Calling
functions and function objects</a>
</h3>
<p>
Having generic C++ code call back arbitrary functions provided by the client
used to be a heavily repetitive task, as different functions can differ in
arity, invocation syntax and other properties that might be part of the type.
Transporting arguments as Fusion sequences and factoring out the invocation
makes Fusion algorithms applicable to function arguments and also reduces the
problem to one invocation syntax and a fixed arity (instead of an arbitrary
number of arbitrary arguments times several syntactic variants times additional
properties).
</p>
<p>
Transforming an unfused function into its fused counterpart allows n-ary calls
from an algorithm that invokes an unary <a href="functional/concepts/poly.html" title=" Polymorphic Function
Object">Polymorphic
Function Object</a> with <a href="sequence.html" title="Sequence">Sequence</a>
arguments.
</p>
<p>
The library provides several function templates to invoke different kinds of
functions and adapters to transform them into fused form, respectively. Every
variant has a corresponding generator function template that returns an adapter
instance for the given argument.
</p>
<a name="fusion.functional.making_fusion_code_callable_through_a_function_object_interface"></a><h3>
<a name="id651784"></a>
<a href="functional.html#fusion.functional.making_fusion_code_callable_through_a_function_object_interface">Making
Fusion code callable through a function object interface</a>
</h3>
<p>
Transforming a fused function into its unfused counterpart allows to create
function objects to accept arbitrary calls. In other words, an unary function
object can be implemented instead of (maybe heavily overloaded) function templates
or function call operators.
</p>
<p>
The library provides several adapter variants that implement this transformation,
ranging from strictly typed to fully generic. The latter provides a reusable,
approximate solution to <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm" target="_top">The
Forwarding Problem</a>. Every generic variant has a corresponding generator
function template that returns an adapter instance for the given argument.
</p>
</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"><small>Copyright © 2001-2007 Joel de Guzman, Dan Marsden, Tobias
Schwinger<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
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>)
</p></small></div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="extension/macros/adapt_assoc.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><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="functional/concepts.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
</body>
</html>