Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

THE BOOST MPL LIBRARY: The lambda Metafunction

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Handling Placeholders / The lambda Metafunction

The lambda Metafunction

Мы можемгенерироватькласс метафункций изboost::add_pointer<_1>, используя MPLлямбдаМетафункция:

template <class X>
struct two_pointers
  : twice<typename mpl::lambda<boost::add_pointer<_1> >::type, X>
{};
BOOST_STATIC_ASSERT((
    boost::is_same<
        two_pointers<int>::type
      , int**
    >::value
));

Мы будем ссылаться на классы метафункций, такие какadd_pointer_fи выражения заполнителей, такие какboost::add_pointer<_1>каклямбда выражения. Термин, означающий "неназванный функциональный объект", был введен в 1930-х годах логиком Алонзо Черчом как часть фундаментальной теории вычислений, которую он назваллямбда-исчислением.MPL использует несколько неясное словолямбдаиз-за его устоявшегося прецедента в функциональных языках программирования.

[4]См.http://en.wikipedia.org/wiki/Lambda_calculusдля углубленного рассмотрения, включая ссылку на документ Церкви, доказывающий, что эквивалентность выражений лямбды в целом неразрешима.

Хотя его основная цель состоит в том, чтобы превратить выражения заполнителей в классы метафункций,mpl::lambdaможет принять любое выражение лямбда, даже если это уже класс метафункций. В этом случаелямбдавозвращает свой аргумент без изменений. Алгоритмы MPL, такие как, трансформируют, называютлямбдавнутренне, прежде чем вызывать полученный класс метафункций, так что они одинаково хорошо работают с любым видом лямбда-выражения. Мы можем применить ту же стратегию кдважды:

template <class F, class X>
struct twice
   : apply1<
         typename mpl::lambda<F>::type
       , typename apply1<
             typename mpl::lambda<F>::type
           , X
         >::type
     >
{};

Теперь мы можем использоватьдваждыс метафункциональными классамиивыражениями заполнителей:

int* x;
twice<add_pointer_f, int>::type           p = &x;
twice<boost::add_pointer<_1>, int>::type q = &x;

Статья THE BOOST MPL LIBRARY: The lambda Metafunction раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 09:01:48/0.027361154556274/1