![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Actors revisitedBoost , ,
Этот класс является классом протокола для всех участников. Этот класс по сути является интерфейсным контрактом. Актерский класс на самом деле не знает, как действовать на что-либо, но вместо этого полагается на шаблонный параметр BaseT (от которого актер будет исходить) для выполнения фактического действия. Актер класса шаблон объявляется как:
Актер — это функтор, способный принимать аргументы до заданного максимума. Это до базового класса, чтобы сделать фактическую обработку или, возможно, ограничить проходимость (нет. аргументов). При вызове функтора через поставляемого оператора (), актер направляет аргументы, переданные клиентом, в кортеж и вызывает функцию члена Eval базового класса. Схематически:
Ожидается, что базовые классы актеров, от которых этот класс наследует, будут иметь соответствующую функцию члена, совместимую с концептуальным интерфейсом:
где args - фактические аргументы, переданные клиентом, направляемые в кортеж (см. кортеж для деталей). Актер может быть любым. Базовые классы могут свободно возвращать любые типы, даже зависимые от аргументов типы (типы, которые выводятся из типов аргументов). После оценки параметров и выполнения некоторых вычислений или действий функция члена Eval завершается возвращением чего-либо клиенту. Для этого передающая функция (оператор() актера) должна знать тип возврата функции члена эваля, которую она вызывает. Для этой цели актерские базовые классы должны предоставлять класс вложенных шаблонов:
Этот вспомогательный класс предоставляет информацию о типе результата, возвращаемую функцией члена эвала базового класса актеров. Результат класса вложенного шаблона должен иметь тип DEF, который отражает тип возврата его функции члена eval. По сути, это компьютер типа, который отвечает на вопрос "приведенные аргументы, упакованные в тип TupleT, каким будет тип результата функции члена Eval ActorT?". Существует глобальный шаблон класса actor_result, объявленный в области пространства имён phoenix, который запрашивает тип результата актера, данный кортеж. Вот заявление классного актера_результат:
Учитывая актерский тип ActorT и TupleT, мы можем получить актерский тип возвращения таким образом:
где Actor_return_type - фактический тип, возвращаемый функцией члена Eval ActorT, учитывая некоторые аргументы, упакованные в TupleT. Для справки, вот типичный актер::оператор(), который принимает два (2) аргумента:
Copyright © 2001-2002 Joel de Guzman Статья Actors revisited раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |