Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/mpl/doc/refmanual/metafunctions.html @ 12

Last change on this file since 12 was 12, checked in by landauf, 18 years ago

added boost

File size: 7.6 KB
Line 
1<?xml version="1.0" encoding="utf-8" ?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4<head>
5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
7<title>The MPL Reference Manual: Metafunctions</title>
8<link rel="stylesheet" href="../style.css" type="text/css" />
9</head>
10<body class="docframe refmanual">
11<table class="header"><tr class="header"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./reverse-stable-partition.html" class="navigation-link">Prev</a>&nbsp;<a href="./metafunctions-concepts.html" class="navigation-link">Next</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./algorithms.html" class="navigation-link">Back</a>&nbsp;<a href="./data-types.html" class="navigation-link">Along</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="../refmanual.html" class="navigation-link">Up</a>&nbsp;<a href="../refmanual.html" class="navigation-link">Home</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./refmanual_toc.html" class="navigation-link">Full TOC</a></span></td>
12<td class="header-group page-location"><a href="../refmanual.html" class="navigation-link">Front Page</a> / <a href="./metafunctions.html" class="navigation-link">Metafunctions</a></td>
13</tr></table><div class="header-separator"></div>
14<div class="section" id="metafunctions">
15<h1><a class="toc-backref" href="../refmanual.html#id436" name="metafunctions">Metafunctions</a></h1>
16<a class="target" id="label-metafunctions" name="label-metafunctions"></a><p>The MPL includes a number of predefined metafunctions that can be roughly
17classified in two categories: <cite>general purpose metafunctions</cite>, dealing with
18conditional <a class="reference" href="./type-selection.html">type selection</a> and higher-order metafunction <a class="reference" href="./invocation.html">invocation</a>,
19<a class="reference" href="./composition-and-argument.html">composition</a>, and <a class="reference" href="./composition-and-argument.html">argument binding</a>, and <cite>numeric metafunctions</cite>,
20incapsulating built-in and user-defined <a class="reference" href="./arithmetic-operations.html">arithmetic</a>, <a class="reference" href="./comparisons.html">comparison</a>,
21<a class="reference" href="./logical-operations.html">logical</a>, and <a class="reference" href="./bitwise-operations.html">bitwise</a> operations.</p>
22<p>Given that it is possible to perform integer numeric computations at
23compile time using the conventional operators notation, the need for the
24second category might be not obvious, but it in fact plays a cental role in
25making programming with MPL seemingly effortless. In
26particular, there are at least two contexts where built-in language
27facilities fall short <a class="footnote-reference" href="#portability" id="id200" name="id200">[3]</a>:</p>
28<ol class="arabic simple">
29<li>Passing a computation to an algorithm.</li>
30<li>Performing a computation on non-integer data.</li>
31</ol>
32<p>The second use case deserves special attention. In contrast to the built-in,
33strictly integer compile-time arithmetics, the MPL numeric metafunctions are
34<em>polymorphic</em>, with support for <em>mixed-type arithmetics</em>. This means that they
35can operate on a variety of numeric types — for instance, rational,
36fixed-point or complex numbers, — and that, in general, you are allowed to
37freely intermix these types within a single expression. See <a class="reference" href="./numeric-metafunction.html">Numeric Metafunction</a> concept for more details on the MPL numeric infrastructure.</p>
38<!-- The provided `infrastructure`__ allows easy plugging of user-defined numeric
39types
40Naturally, they also , meaning that you can perform a computation on the
41arguments of different types, and the result will yeild the largest/most general
42of them. For user-defined numeric types, they provide an `infrastructure`__ that
43allows easy plugging and seemless integration with predefined library
44types. details.
45
46__ `Numeric Metafunction`_ -->
47<p>To reduce a negative syntactical impact of the metafunctions notation
48over the infix operator notation, all numeric metafunctions
49allow to pass up to N arguments, where N is defined by the value of
50<a class="refentry reference" href="./limit-metafunction-arity.html"><tt class="refentry literal"><span class="pre">BOOST_MPL_LIMIT_METAFUNCTION_ARITY</span></tt></a> configuration macro.</p>
51<table class="footnote" frame="void" id="portability" rules="none">
52<colgroup><col class="label" /><col /></colgroup>
53<tbody valign="top">
54<tr><td class="label"><a class="fn-backref" href="#id200" name="portability">[3]</a></td><td>All other considerations aside, as of the time of this writing
55(early 2004), using built-in operators on integral constants still often
56present a portability problem — many compilers cannot handle particular
57forms of expressions, forcing us to use conditional compilation. Because MPL
58numeric metafunctions work on types and encapsulate these kind of workarounds
59internally, they elude these problems, so if you aim for portability, it is
60generally adviced to use them in the place of the conventional operators, even
61at the price of slightly decreased readability.</td></tr>
62</tbody>
63</table>
64<!-- modtime: November 04, 2004 09:37:30 +0000 -->
65<ul class="toc simple" id="outline">
66<li><a class="reference" href="./metafunctions-concepts.html" id="id437" name="id437">Concepts</a></li>
67<li><a class="reference" href="./type-selection.html" id="id445" name="id445">Type Selection</a></li>
68<li><a class="reference" href="./invocation.html" id="id450" name="id450">Invocation</a></li>
69<li><a class="reference" href="./composition-and-argument.html" id="id454" name="id454">Composition and Argument Binding</a></li>
70<li><a class="reference" href="./arithmetic-operations.html" id="id461" name="id461">Arithmetic Operations</a></li>
71<li><a class="reference" href="./comparisons.html" id="id468" name="id468">Comparisons</a></li>
72<li><a class="reference" href="./logical-operations.html" id="id475" name="id475">Logical Operations</a></li>
73<li><a class="reference" href="./bitwise-operations.html" id="id479" name="id479">Bitwise Operations</a></li>
74<li><a class="reference" href="./trivial.html" id="id485" name="id485">Trivial</a></li>
75<li><a class="reference" href="./miscellaneous.html" id="id487" name="id487">Miscellaneous</a></li>
76</ul>
77</div>
78
79<div class="footer-separator"></div>
80<table class="footer"><tr class="footer"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./reverse-stable-partition.html" class="navigation-link">Prev</a>&nbsp;<a href="./metafunctions-concepts.html" class="navigation-link">Next</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./algorithms.html" class="navigation-link">Back</a>&nbsp;<a href="./data-types.html" class="navigation-link">Along</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="../refmanual.html" class="navigation-link">Up</a>&nbsp;<a href="../refmanual.html" class="navigation-link">Home</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./refmanual_toc.html" class="navigation-link">Full TOC</a></span></td>
81</tr></table></body>
82</html>
Note: See TracBrowser for help on using the repository browser.