![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
THE BOOST MPL LIBRARY: The Importance of Being LazyBoost , ,
|
Front Page / Tutorial: Metafunctions and Higher-Order Metaprogramming / Lambda Details / The Importance of Being Lazy |
Вспомните определение always_int из предыдущей главы:
struct always_int { typedef int type; };
Поначалу нульарные метафункции могут показаться не очень важными, поскольку что-то вроде add_pointer
typedef mpl::vector<int, char*, double&> seq; typedef mpl::transform<seq, boost::add_pointer<_> > calc_ptr_seq;
Обратите внимание, что calc_ptr_seq является нулевой метафункцией, поскольку имеет трансформацию вложенного ::type. Шаблон C++ не создается до тех пор, пока мы не заглянем внутрь него. Простое наименование calc_ptr_seq не вызывает его оценки, поскольку мы не получили доступ к нему. : тип .
Метафункции можно вызывать lazily, а не сразу после подачи всех аргументов. Мы можем использовать ленивую оценку для улучшения времени компиляции, когда результат метафункции будет использоваться только условно. Иногда мы также можем избежать искажения структуры программы, назвав недействительным вычислением, не выполняя его. Это то, что мы сделали с calc_ptr_seq выше, так как вы не можете юридически сформировать double&*. Лень и все ее достоинства будут повторяющейся темой в этой книге.
Статья THE BOOST MPL LIBRARY: The Importance of Being Lazy раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |