![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
OperatorsBoost , ,
Lazy operatorsЭтот объект обеспечивает механизм для ленивой оценки операторов. Синтактически ленивый оператор выглядит и чувствует себя как обычный C/C++ инфикс, префикс или постфикс-оператор. Приложение оператора выглядит одинаково. Однако, в отличие от обычных операторов, фактическое исполнение оператора откладывается. Образцы:
Мы видели ленивых операторов в действии (см. Давайте вернемся и проверим его немного дальше:
Через перегрузку оператора выражение "arg1% 2 == 1 " фактически генерирует композит. Этот композиционный объект передается функции STL find_if. По мнению STL, композит - это просто фанктор, ожидающий одного аргумента - элемента контейнера. Для каждого элемента в контейнере «с» элемент передается как аргумент (arg1) в композицию (functor). Композиционный (функтор) проверяет, является ли это странным значением на основе выражения "arg1% 2 == 1 " , где arg1 итеративно заменяется элементом контейнера. Набор классов реализует все C++ бесплатные операторы. Как и ленивые функции (см. функции), ленивые операторы не исполняются сразу, когда на них ссылаются. Вместо этого создается композитный (см. композитный) объект и возвращается к звонителю. Пример:
не более чем возвратить композит. Второй вызов функции будет оценивать фактических операторов. Пример:
будет распечатать "54 " . Арбитражно сложные выражения могут быть лениво оценены по трем простым правилам:
Пример:
Применение Lazy-operator очень заразно. В большинстве случаев один актер argN заражает всех своих ближайших соседей в группе (первый уровень или выражение родительского размера). Обратите внимание, что хотя, по крайней мере, один из операнд должен быть действительным классом актера для того, чтобы ленивая оценка вступила в силу, если это не так, и мы все еще хотим лениво оценить выражение, мы можем использовать var(x), val(x) или const(x) для преобразования операнда в действительный объект действия (см. примитивы). Пример:
Поддерживаемые операторы: Неработающие операторы:
Бинарные операторы:
Copyright © 2001-2002 Joel de Guzman Статья Operators раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |