![]() |
![]() ![]() ![]() ![]() |
![]() |
THE BOOST MPL LIBRARY: The apply MetafunctionBoost , ,
|
|||||||||
| Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Handling Placeholders / The apply Metafunction |
Призыв к действиюлямбдаявляется настолько распространенной моделью, что MPL обеспечиваетприменять метафункцию, чтобы сделать именно это. использоватьmpl::apply, наша гибкая версиядваждыстановится:
#include <boost/mpl/apply.hpp>
template <class F, class X>
struct twice
: mpl::apply<F, typename mpl::apply<F,X>::type>
{};
Вы можете думать оmpl::applyкак о шаблонеapply1, который мы написали, с двумя дополнительными функциями:
Покаприменяется1работает только на классах метафункций, первый аргументmpl::applyможет быть любое лямбда-выражение (в том числе построенное с заполнителями).
В то время какприменяется1принимает только один дополнительный аргумент, к которому будет применяться класс метафункций,mpl::applyможет вызвать свой первый аргумент на любое число от нуля до пяти дополнительных аргументов.Например:
// binary lambda expression applied to 2 additional arguments
mpl::apply<
mpl::plus<_1,_2>
,mpl::int_<6>
,mpl::int_<7>
>::type::value // == 13
| [5] | См. раздел Configuration Macrosсправочного руководства MPLдля описания того, как изменить максимальное количество аргументов, обрабатываемыхmpl::apply. |
Guideline
При написании метафункции, которая вызывает один из своих аргументов, используйтеmpl::применитетак, чтобы она работала с лямбда-выражениями.
Статья THE BOOST MPL LIBRARY: The apply Metafunction раздела может быть полезна для разработчиков на c++ и boost.
:: Главная :: ::
реклама |