Phoenix 库有着优雅的设计,它的11个模块分为4层,模块的功能之间完全正交,没有循环依赖。低层模块不依赖高层模块,同一层的模块之间也不互相依赖。这意味着用户可以自由选用自己需要的模块,而不需要把其余部分包含进来。
Core
位于 Phoenix 库最底层(第一层)的是 Actor 模块,它是对于 Phoenix functor 的原型定义,做了一个 functor 最基本的工作:重载 operator()。
Actor 分为两种:Primitives 和 Composites,这两个模块构成 Phoenix 库的第二层。第一层和第二层称为 Phoenix 的 Core。
Primitives 提供了 Phoenix 库的功能“砖头”,而 Composites 则是“水泥”,把砖头粘接起来形成更大的功能块。
功能模块
Primitives 包括3种:Function,Operator 和 Statement。
Function --- 用来支持 Lazy functions (例如 add)
Operator --- 用来支持 Lazy operators (例如 +)
Statement --- 用来支持 Lazy statements (例如 if_, while_)
Composites 也包括3种:Object,Scope 和 Bind。
Object --- 支持 Lazy cast(例如 static_cast_)以及对象的创建和销毁(new_ 和 delete_)
Scope --- 支持作用域,本地变量和 lambda-lambda
Bind --- 有点类似 boost::bind,用来把普通函数,成员函数和成员变量包装成 lazy functions
以上的6个模块位于 Phoenix 的第三层
"Lazy" STL
在 Phoenix 的最高层(第四层),是两个模仿 STL 的模块:Container(也称为 Intrinsic)和 Algorithm。
Container 提供的不是容器,而是容器的方法的 lazy 版本,例如 push_back
Algorithm 就是 STL 算法的 lazy 版本
包含文件
Core #include <boost/spirit/home/phoenix/core.hpp>
Function #include <boost/spirit/home/phoenix/function.hpp>
Operator #include <boost/spirit/home/phoenix/operator.hpp>
Statement #include <boost/spirit/home/phoenix/statement.hpp>
Object #include <boost/spirit/home/phoenix/object.hpp>
Scope #include <boost/spirit/home/phoenix/scope.hpp>
Bind #include <boost/spirit/home/phoenix/bind.hpp>
Container #include <boost/spirit/home/phoenix/container.hpp>
Algorithm #include <boost/spirit/home/phoenix/algorithm.hpp>