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">
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
6 <meta name=
"generator" content=
"Docutils 0.7: http://docutils.sourceforge.net/" />
7 <title>The MPL Reference Manual: Metafunction Class
</title>
8 <link rel=
"stylesheet" href=
"../style.css" type=
"text/css" />
10 <body class=
"docframe refmanual">
11 <table class=
"header"><tr class=
"header"><td class=
"header-group navigation-bar"><span class=
"navigation-group"><a href=
"./metafunction.html" class=
"navigation-link">Prev
</a> <a href=
"./lambda-expression.html" class=
"navigation-link">Next
</a></span><span class=
"navigation-group-separator"> |
</span><span class=
"navigation-group"><a href=
"./metafunction.html" class=
"navigation-link">Back
</a> <a href=
"./lambda-expression.html" class=
"navigation-link">Along
</a></span><span class=
"navigation-group-separator"> |
</span><span class=
"navigation-group"><a href=
"./metafunctions-concepts.html" class=
"navigation-link">Up
</a> <a href=
"../refmanual.html" class=
"navigation-link">Home
</a></span><span class=
"navigation-group-separator"> |
</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> /
<a href=
"./metafunctions-concepts.html" class=
"navigation-link">Concepts
</a> /
<a href=
"./metafunction-class.html" class=
"navigation-link">Metafunction Class
</a></td>
13 </tr></table><div class=
"header-separator"></div>
14 <div class=
"section" id=
"metafunction-class">
15 <h1><a class=
"toc-backref" href=
"./metafunctions-concepts.html#id1513">Metafunction Class
</a></h1>
16 <div class=
"section" id=
"summary">
18 <p>A
<em>metafunction class
</em> is a certain form of metafunction representation
19 that enables higher-order metaprogramming. More precisely, it's a class
20 with a publicly-accessible nested
<a class=
"reference internal" href=
"./metafunction.html">Metafunction
</a> called
<tt class=
"literal"><span class=
"pre"><a href=
"./apply.html" class=
"identifier">apply
</a></span></tt>.
21 Correspondingly, a metafunction class invocation is defined as invocation
22 of its nested
<tt class=
"literal"><span class=
"pre"><a href=
"./apply.html" class=
"identifier">apply
</a></span></tt> metafunction.
</p>
24 <div class=
"section" id=
"id827">
25 <h3><a class=
"subsection-title" href=
"#expression-requirements" name=
"expression-requirements">Expression requirements
</a></h3>
26 <p>In the following table and subsequent specifications,
<tt class=
"literal"><span class=
"pre">f
</span></tt> is a
<a class=
"reference internal" href=
"./metafunction-class.html">Metafunction Class
</a>.
</p>
27 <table border=
"1" class=
"docutils table">
33 <thead valign=
"bottom">
34 <tr><th class=
"head">Expression
</th>
35 <th class=
"head">Type
</th>
36 <th class=
"head">Complexity
</th>
40 <tr><td><tt class=
"literal"><span class=
"pre">f::
<a href=
"./apply.html" class=
"identifier">apply
</a>::type
</span></tt></td>
44 <tr><td><tt class=
"literal"><span class=
"pre">f::
<a href=
"./apply.html" class=
"identifier">apply
</a><>::type
</span></tt></td>
48 <tr><td><tt class=
"literal"><span class=
"pre">f::
<a href=
"./apply.html" class=
"identifier">apply
</a><a1,...an
>::type
</span></tt></td>
55 <div class=
"section" id=
"id828">
56 <h3><a class=
"subsection-title" href=
"#expression-semantics" name=
"expression-semantics">Expression semantics
</a></h3>
57 <pre class=
"literal-block">
58 typedef f::
<a href=
"./apply.html" class=
"identifier">apply
</a>::type x;
60 <table class=
"docutils field-list" frame=
"void" rules=
"none">
61 <col class=
"field-name" />
62 <col class=
"field-body" />
64 <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 internal" href=
"./metafunction-class.html">Metafunction Class
</a>;
<tt class=
"literal"><span class=
"pre">f::
<a href=
"./apply.html" class=
"identifier">apply
</a>::type
</span></tt> is a
<em>type-name
</em>.
</td>
66 <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 class invocation.
</td>
70 <!-- ................................................................................... -->
71 <pre class=
"literal-block">
72 typedef f::
<a href=
"./apply.html" class=
"identifier">apply
</a><>::type x;
74 <table class=
"docutils field-list" frame=
"void" rules=
"none">
75 <col class=
"field-name" />
76 <col class=
"field-body" />
78 <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 internal" href=
"./metafunction-class.html">Metafunction Class
</a>;
<tt class=
"literal"><span class=
"pre">f::
<a href=
"./apply.html" class=
"identifier">apply
</a><>::type
</span></tt> is a
<em>type-name
</em>.
</td>
80 <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 class invocation.
</td>
84 <!-- ................................................................................... -->
85 <pre class=
"literal-block">
86 typedef f::
<a href=
"./apply.html" class=
"identifier">apply
</a><a1,
<em>...
</em>a
<em>n
</em>>::type x;
88 <table class=
"docutils field-list" frame=
"void" rules=
"none">
89 <col class=
"field-name" />
90 <col class=
"field-body" />
92 <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 metafunction class;
<tt class=
"literal"><span class=
"pre"><a href=
"./apply.html" class=
"identifier">apply
</a></span></tt> is a
<a class=
"reference internal" href=
"./metafunction.html">Metafunction
</a>.
</td>
94 <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 class
95 invocation with the actual arguments
<tt class=
"literal"><span class=
"pre">a1
</span></tt>,...
<tt class=
"literal"><span class=
"pre">an
</span></tt>.
</td>
100 <div class=
"section" id=
"id829">
101 <h3><a class=
"subsection-title" href=
"#models" name=
"models">Models
</a></h3>
103 <li><a class=
"reference internal" href=
"./always.html">always
</a></li>
104 <li><a class=
"reference internal" href=
"./arg.html">arg
</a></li>
105 <li><a class=
"reference internal" href=
"./quote.html">quote
</a></li>
106 <li><a class=
"reference internal" href=
"./numeric-cast.html">numeric_cast
</a></li>
107 <li><a class=
"reference internal" href=
"./unpack-args.html">unpack_args
</a></li>
110 <div class=
"section" id=
"id830">
111 <h3><a class=
"subsection-title" href=
"#see-also" name=
"see-also">See also
</a></h3>
112 <p><a class=
"reference internal" href=
"./metafunctions.html">Metafunctions
</a>,
<a class=
"reference internal" href=
"./metafunction.html">Metafunction
</a>,
<a class=
"reference internal" href=
"./lambda-expression.html">Lambda Expression
</a>,
<a class=
"reference internal" href=
"./invocation.html">invocation
</a>,
<a class=
"reference internal" href=
"./apply-wrap.html">apply_wrap
</a>,
<a class=
"reference internal" href=
"./bind.html">bind
</a>,
<a class=
"reference internal" href=
"./quote.html">quote
</a></p>
113 <!-- Metafunctions/Concepts//Lambda Expression |30 -->
117 <div class=
"footer-separator"></div>
118 <table class=
"footer"><tr class=
"footer"><td class=
"header-group navigation-bar"><span class=
"navigation-group"><a href=
"./metafunction.html" class=
"navigation-link">Prev
</a> <a href=
"./lambda-expression.html" class=
"navigation-link">Next
</a></span><span class=
"navigation-group-separator"> |
</span><span class=
"navigation-group"><a href=
"./metafunction.html" class=
"navigation-link">Back
</a> <a href=
"./lambda-expression.html" class=
"navigation-link">Along
</a></span><span class=
"navigation-group-separator"> |
</span><span class=
"navigation-group"><a href=
"./metafunctions-concepts.html" class=
"navigation-link">Up
</a> <a href=
"../refmanual.html" class=
"navigation-link">Home
</a></span><span class=
"navigation-group-separator"> |
</span><span class=
"navigation-group"><a href=
"./refmanual_toc.html" class=
"navigation-link">Full TOC
</a></span></td>
119 <td><div class=
"copyright-footer"><div class=
"copyright">Copyright ©
2001-
2009 Aleksey Gurtovoy and David Abrahams
</div>
120 Distributed under the Boost Software License, Version
1.0. (See accompanying
121 file LICENSE_1_0.txt or copy at
<a class=
"reference external" href=
"http://www.boost.org/LICENSE_1_0.txt" target=
"_top">http://www.boost.org/LICENSE_1_0.txt
</a>)
</div></td></tr></table></body>