![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Quick startBoost , ,
Чтобы получить первое представление о том, что предлагает фреймворк Phoenix, давайте начнем с примера. Мы хотим найти первое нечетное число в контейнере STL. 1) Обычно мы используем функтор или указатель функции и передаем его в функцию find_if (образец 1.cpp): Напишите функцию:
Передайте указатель функции в функцию find_if общего назначения STL:
2) С помощью "Феникса" то же самое можно сделать непосредственно с помощью одного лайнера (sample2.cpp):
Выражение "arg1 % 2 == 1" автоматически создает функтор с ожидаемым поведением. В FP эта неназванная функция называется лямбда-функцией. В отличие от версии указателя функции 1, которая является мономорфной (ожидает и работает только с аргументом int фиксированного типа), версия Phoenix полностью полиморфна и работает с любым контейнером (инт, двойников, комплекса и т. Д.), Пока ее элементы могут обрабатывать выражение "arg1 % 2 == 1". 3) Написать полиморфный функтор с помощью Phoenix (sample3.cpp)
Выберите функцию lazy is_odd:
s_odd_ является фактическим функтором. Он был проксирован в функции Как и 2, и в отличие от 1, указателей функций или простых функторов C++, is_odd является истинным ленивым полиморфным функтором (ранг-2 полиморфный функтоид, на жаргоне FC++). Функторная версия Phoenix полностью полиморфна и работает с любым контейнером (инт, двойки, комплекс и т. д.), если ее элементы могут обрабатывать выражение "arg1 % 2 == 1". Однако, в отличие от 2, это более эффективно и имеет меньше накладных расходов, особенно при работе с гораздо более сложными функциями. Это только верхушка айсберга. Есть более изящные вещи, которые вы можете сделать с фреймворком. Есть довольно интересные концепции, такие как полиморфные ленивые функции ранга-2, ленивые утверждения, связующие и т. Д.; Достаточно, чтобы разжечь аппетит любого, кто хочет выжать больше энергии из C++.
Copyright © 2001-2002 Joel de Guzman Статья Quick start раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |