blob: 0cf58b31394f506238c5ed991497ae0a53569421 [file] [log] [blame]
.. Metafunctions/Concepts//Metafunction Class |20
Metafunction Class
==================
Summary
-------
A *metafunction class* is a certain form of metafunction representation
that enables higher-order metaprogramming. More precisely, it's a class
with a publicly-accessible nested |metafunction| called ``apply``.
Correspondingly, a metafunction class invocation is defined as invocation
of its nested ``apply`` metafunction.
Expression requirements
-----------------------
|In the following table...| ``f`` is a |Metafunction Class|.
+-------------------------------+---------------------------+---------------------------+
| Expression | Type | Complexity |
+===============================+===========================+===========================+
| ``f::apply::type`` | Any type | Unspecified. |
+-------------------------------+---------------------------+---------------------------+
| ``f::apply<>::type`` | Any type | Unspecified. |
+-------------------------------+---------------------------+---------------------------+
| ``f::apply<a1,...an>::type`` | Any type | Unspecified. |
+-------------------------------+---------------------------+---------------------------+
Expression semantics
--------------------
.. parsed-literal::
typedef f::apply::type x;
:Precondition:
``f`` is a nullary |Metafunction Class|; ``f::apply::type`` is a *type-name*.
:Semantics:
``x`` is the result of the metafunction class invocation.
.. ...................................................................................
.. parsed-literal::
typedef f::apply<>::type x;
:Precondition:
``f`` is a nullary |Metafunction Class|; ``f::apply<>::type`` is a *type-name*.
:Semantics:
``x`` is the result of the metafunction class invocation.
.. ...................................................................................
.. parsed-literal::
typedef f::apply<a1,\ |...|\ a\ *n*\>::type x;
:Precondition:
``f`` is an *n*-ary metafunction class; ``apply`` is a |Metafunction|.
:Semantics:
``x`` is the result of the metafunction class
invocation with the actual arguments |a1...an|.
Models
------
* |always|
* |arg|
* |quote|
* |numeric_cast|
* |unpack_args|
See also
--------
|Metafunctions|, |Metafunction|, |Lambda Expression|, |Invocation|, |apply_wrap|, |bind|, |quote|
.. copyright:: Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)