41 lines
1.3 KiB
Plaintext
41 lines
1.3 KiB
Plaintext
[#metafunction]
|
|
[section Template metafunction]
|
|
|
|
A ['template metafunction] represents a function over types that is evaluated at
|
|
compile-time. It is implemented by a template class.
|
|
|
|
The template arguments of that class are expected to be types (`class` or
|
|
`typename` template arguments). They represent the arguments of the
|
|
metafunction.
|
|
|
|
Instances of the template class are expected to have a public nested type called
|
|
`type`. This type is the type the metafunction returns.
|
|
|
|
Template metafunction are expected to be called with
|
|
[link metaprogramming_value template metaprogramming values] as arguments only.
|
|
|
|
Template metafunctions are expected to return template metaprogramming values.
|
|
|
|
For example this is the identity template metafunction:
|
|
|
|
template <class T>
|
|
struct identity
|
|
{
|
|
using type = T;
|
|
};
|
|
|
|
This metafunction is called `identity`. It takes one argument, `T`. The result
|
|
of calling this metafunction is its argument, `T`.
|
|
|
|
To call this metafunction, one has to instantiate the template class. The
|
|
template arguments it is instantiated with are the arguments the metafunction is
|
|
called with. For example:
|
|
|
|
identity<std::integral_constant<int, 13>>::type
|
|
|
|
The above example calls the metafunction `identity` with
|
|
`std::integral_constant<int, 13>` as its argument.
|
|
|
|
[endsect]
|
|
|