![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
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.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |