![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Composites revisitedBoost , ,
Композит - это актерский базовый класс, состоящий из нуля или более актеров (см. актер) и операции. Композит сам по себе является актерским суперклассом и соответствует ожидаемому концептуальному интерфейсу. Его эйвальная функция разворачивает искаженные фактические аргументы, ссылаясь на функцию эйвального члена каждого из актеров. Результаты каждого из них затем передаются в качестве аргументов в пользу операции. Специализации предоставляются для композитов, которые обрабатывают различное количество актеров от нуля до N, где N является предопределенным максимумом. Схематически:
Вот типичный пример функции эйвального элемента композита для 2-актерного композита:
где self_t — тип «я» композита, TupleT «args» — это аргументы, переданные актеру (см. актер), а op — операция, связанная с композитом. r0 и r1 — это фактические аргументы, не замешанные в «аргах» и предварительно обработанные субъектами композита, которые затем передаются в операцию «операция». Операция может быть любым подходящим функтором, который может принять аргументы, переданные композитом. Операция должна иметь оператора-члена(), который осуществляет фактическую операцию. Должна существовать одно-единственная переписка между субъектами составной части и аргументами оператора-члена операции. Ожидается, что операция также будет иметь вложенный результат класса шаблонов Вот взгляд на то, что происходит, когда функция Эвал называется:
Вот пример простой операции, которая вычисляет число:
Это прекрасный пример полиморфного функтора, обсуждаемого ранее в разделе о функциях. Как мы видим, операции полиморфны. Его аргументы и тип возврата не привязаны к определенному типу. Пример выше, например, может обрабатывать любой тип ArgT, если у него есть оператор умножения. Композиты не создаются напрямую. Вместо этого существуют мета-программы, которые косвенно создают композиты. См. операторы, связующие и функции для примеров.
Copyright © 2001-2002 Joel de Guzman Статья Composites revisited раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |