Осторожность и внимание к деталям было уделено разработке и внедрению Phoenix.
Библиотека организована в четыре слоя:
актер
Ценность, ссылка, аргументы
Функция, Оператор, Объект, Заявление, Сфера применения
STL, Fusion, Bind
Модули ортогональные, без циклических зависимостей. Нижние слои не зависят от более высоких слоев. Модули в слое не зависят от других модулей в том же слое. Это означает, например, что Bind может быть полностью отброшен, если он не требуется; или можно, возможно, вынуть Оператора и Заявление и просто использовать Функцию, которая может быть желательна в чистом FP-приложении.
Библиотека выросла из оригинального Phoenix, но до сих пор содержит только заголовочные файлы. Нет никаких объектных файлов, против которых можно было бы ссылаться.
<Actor>является основной концепцией библиотеки. Ленивые функции абстрагируются как актеры.
Терминалы обеспечивают основные строительные блоки функциональности в Фениксе. Выражения используются для объединения этих терминалов для обеспечения более мощной функциональности.
Выражения состоят из нуля или более актеров. Каждый актер в композите может быть другим выражением.
Table 1.2. Modules
модуль
Описание
Функция
Поддержка ленивых функций (например,<add>)
Оператор
Поддержка ленивых операторов (например,<+>)
Заявление
Ленивые высказывания (например,<if_>,<while_>)
Объект
Ленивые отливки (например,<static_cast_>), разрушение создания объекта (например,<new_>,<delete_>)
Область применения
Поддержка областей применения, локальных переменных и лямбда-ламбда
Связать
Ленивые функции из свободных функций, членских функций или членских переменных.
Контейнер STL
Набор предопределенных «ленивых» функций, которые работают на STL-контейнерах и последовательностях (например,<push_back>).
Алгоритм STL
Набор предопределенных «ленивых» версий алгоритмов STL (например,<find_if>).
Каждый модуль определяется в файле заголовка с тем же именем. Например, основной модуль определен в<<boost/phoenix/core.hpp>>.
Table 1.3. Includes
модуль
Файл
Ядро
<#include<boost/phoenix/core.hpp>>
Функция
<#include<boost/phoenix/function.hpp>>
Оператор
<#include<boost/phoenix/operator.hpp>>
Заявление
<#include<boost/phoenix/statement.hpp>>
Объект
<#include<boost/phoenix/object.hpp>>
Область применения
<#include<boost/phoenix/scope.hpp>>
Связать
<#include<boost/phoenix/bind.hpp>>
Контейнер
<#include<boost/phoenix/stl/container.hpp>>
Алгоритм
<#include<boost/phoenix/stl/algorithm.hpp>>
Finer grained включает файлы, доступные для каждой функции; см. последующие разделы.
Статья Organization раздела Chapter 1. Phoenix 3.2.0 Chapter 1. Phoenix 3.2.0 может быть полезна для разработчиков на c++ и boost.