Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/mpl/doc/refmanual/metafunction.html @ 29

Last change on this file since 29 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 9.3 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<!-- Copyright Aleksey Gurtovoy 2006. Distributed under the Boost -->
5<!-- Software License, Version 1.0. (See accompanying -->
6<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
7<head>
8<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
10<title>The MPL Reference Manual: Metafunction</title>
11<link rel="stylesheet" href="../style.css" type="text/css" />
12</head>
13<body class="docframe refmanual">
14<table class="header"><tr class="header"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./metafunctions-concepts.html" class="navigation-link">Prev</a>&nbsp;<a href="./metafunction-class.html" class="navigation-link">Next</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group">Back&nbsp;<a href="./metafunction-class.html" class="navigation-link">Along</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./metafunctions-concepts.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>
15<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> / <a href="./metafunctions-concepts.html" class="navigation-link">Concepts</a> / <a href="./metafunction.html" class="navigation-link">Metafunction</a></td>
16</tr></table><div class="header-separator"></div>
17<div class="section" id="metafunction">
18<h1><a class="toc-backref" href="./metafunctions-concepts.html#id438" name="metafunction">Metafunction</a></h1>
19<div class="section" id="metafunction-description">
20<h3><a class="subsection-title" href="#description" name="description">Description</a></h3>
21<a class="target" id="nullary-metafunction" name="nullary-metafunction"></a><p>A <em>metafunction</em> is a class or a class template that represents a
22function invocable at compile-time. An non-nullary metafunction is
23invoked by instantiating the class template with particular
24template parameters (metafunction arguments); the result of the
25metafunction application is accessible through the instantiation's
26nested <tt class="literal"><span class="pre">type</span></tt> typedef. All metafunction's arguments must be types
27(i.e. only <em>type template parameters</em> are allowed). A metafunction
28can have a variable number of parameters. A <em>nullary metafunction</em> is
29represented as a (template) class with a nested <tt class="literal"><span class="pre">type</span></tt> typename
30member.</p>
31</div>
32<div class="section" id="metafunction-expression-requirements">
33<h3><a class="subsection-title" href="#expression-requirements" name="expression-requirements">Expression requirements</a></h3>
34<p>In the following table and subsequent specifications, <tt class="literal"><span class="pre">f</span></tt> is a <a class="reference" href="./metafunction.html">Metafunction</a>.</p>
35<table border="1" class="table">
36<colgroup>
37<col width="38%" />
38<col width="28%" />
39<col width="33%" />
40</colgroup>
41<thead valign="bottom">
42<tr><th>Expression</th>
43<th>Type</th>
44<th>Complexity</th>
45</tr>
46</thead>
47<tbody valign="top">
48<tr><td><tt class="literal"><span class="pre">f::type</span></tt></td>
49<td>Any type</td>
50<td>Unspecified.</td>
51</tr>
52<tr><td><tt class="literal"><span class="pre">f&lt;&gt;::type</span></tt></td>
53<td>Any type</td>
54<td>Unspecified.</td>
55</tr>
56<tr><td><tt class="literal"><span class="pre">f&lt;a1,..,an&gt;::type</span></tt></td>
57<td>Any type</td>
58<td>Unspecified.</td>
59</tr>
60</tbody>
61</table>
62</div>
63<div class="section" id="metafunction-expression-semantics">
64<h3><a class="subsection-title" href="#expression-semantics" name="expression-semantics">Expression semantics</a></h3>
65<pre class="literal-block">
66typedef f::type x;
67</pre>
68<table class="field-list" frame="void" rules="none">
69<col class="field-name" />
70<col class="field-body" />
71<tbody valign="top">
72<tr class="field"><th class="field-name">Precondition:</th><td class="field-body"><tt class="literal"><span class="pre">f</span></tt> is a nullary <a class="reference" href="./metafunction.html">Metafunction</a>; <tt class="literal"><span class="pre">f::type</span></tt> is a <em>type-name</em>.</td>
73</tr>
74<tr class="field"><th class="field-name">Semantics:</th><td class="field-body"><tt class="literal"><span class="pre">x</span></tt> is the result of the metafunction invocation.</td>
75</tr>
76</tbody>
77</table>
78<!-- ................................................................................... -->
79<pre class="literal-block">
80typedef f&lt;&gt;::type x;
81</pre>
82<table class="field-list" frame="void" rules="none">
83<col class="field-name" />
84<col class="field-body" />
85<tbody valign="top">
86<tr class="field"><th class="field-name">Precondition:</th><td class="field-body"><tt class="literal"><span class="pre">f</span></tt> is a nullary <a class="reference" href="./metafunction.html">Metafunction</a>; <tt class="literal"><span class="pre">f&lt;&gt;::type</span></tt> is a <em>type-name</em>.</td>
87</tr>
88<tr class="field"><th class="field-name">Semantics:</th><td class="field-body"><tt class="literal"><span class="pre">x</span></tt> is the result of the metafunction invocation.</td>
89</tr>
90</tbody>
91</table>
92<!-- ................................................................................... -->
93<pre class="literal-block">
94typedef f&lt;a1,<em>...</em> a<em>n</em>&gt;::type x;
95</pre>
96<table class="field-list" frame="void" rules="none">
97<col class="field-name" />
98<col class="field-body" />
99<tbody valign="top">
100<tr class="field"><th class="field-name">Precondition:</th><td class="field-body"><tt class="literal"><span class="pre">f</span></tt> is an <em>n</em>-ary <a class="reference" href="./metafunction.html">Metafunction</a>; <tt class="literal"><span class="pre">a1</span></tt>,... <tt class="literal"><span class="pre">an</span></tt> are types;
101<tt class="literal"><span class="pre">f&lt;a1,...an&gt;::type</span></tt> is a <em>type-name</em>.</td>
102</tr>
103<tr class="field"><th class="field-name">Semantics:</th><td class="field-body"><tt class="literal"><span class="pre">x</span></tt> is the result of the metafunction invocation
104with the actual arguments <tt class="literal"><span class="pre">a1</span></tt>,... <tt class="literal"><span class="pre">an</span></tt>.</td>
105</tr>
106</tbody>
107</table>
108</div>
109<div class="section" id="metafunction-models">
110<h3><a class="subsection-title" href="#models" name="models">Models</a></h3>
111<ul class="simple">
112<li><a class="refentry reference" href="./identity.html"><tt class="refentry literal"><span class="pre">identity</span></tt></a></li>
113<li><a class="refentry reference" href="./plus.html"><tt class="refentry literal"><span class="pre">plus</span></tt></a></li>
114<li><a class="refentry reference" href="./begin.html"><tt class="refentry literal"><span class="pre">begin</span></tt></a></li>
115<li><a class="refentry reference" href="./insert.html"><tt class="refentry literal"><span class="pre">insert</span></tt></a></li>
116<li><a class="refentry reference" href="./fold.html"><tt class="refentry literal"><span class="pre">fold</span></tt></a></li>
117</ul>
118</div>
119<div class="section" id="metafunction-see-also">
120<h3><a class="subsection-title" href="#see-also" name="see-also">See also</a></h3>
121<p><a class="reference" href="./metafunctions.html">Metafunctions</a>, <a class="reference" href="./metafunction-class.html">Metafunction Class</a>, <a class="reference" href="./lambda-expression.html">Lambda Expression</a>, <a class="reference" href="./invocation.html">invocation</a>, <a class="refentry reference" href="./apply.html"><tt class="refentry literal"><span class="pre">apply</span></tt></a>, <a class="refentry reference" href="./lambda.html"><tt class="refentry literal"><span class="pre">lambda</span></tt></a>, <a class="refentry reference" href="./bind.html"><tt class="refentry literal"><span class="pre">bind</span></tt></a></p>
122<!-- modtime: November 10, 2004 04:37:49 +0000 -->
123<!-- Metafunctions/Concepts//Metafunction Class |20 -->
124</div>
125</div>
126
127<div class="footer-separator"></div>
128<table class="footer"><tr class="footer"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./metafunctions-concepts.html" class="navigation-link">Prev</a>&nbsp;<a href="./metafunction-class.html" class="navigation-link">Next</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group">Back&nbsp;<a href="./metafunction-class.html" class="navigation-link">Along</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./metafunctions-concepts.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>
129</tr></table></body>
130</html>
Note: See TracBrowser for help on using the repository browser.