Boost C++ 库

……全球备受推崇、设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

组织 - Boost C++ 函数库
组织

该框架组织成五个(5)层。

                 +-----------+
                 |  binders  |
                 +-----------+-----------+------------+
                 | functions | operators | statements |
    +------------+-----------+-----------+------------+
    | primitives |             composite              |
    +------------+------------------------------------+
    |                     actor                       |
    +-------------------------------------------------+
    |                     tuples                      |
    +-------------------------------------------------+

最低层是元组库。使用该框架根本不需要了解元组。简而言之,这个小型子库提供了一种将异构类型捆绑在一起的机制。这是一个实现细节。然而,它本身在其他应用程序中也非常有用。稍后将提供更详细的解释。

Actor 是该框架背后的核心概念。惰性函数被抽象为 Actor,它们实际上是多态函子。Actor 只有 2 种类型:

  1. 原子
  2. 组合。

组合由零个或多个 Actor 组成。组合中的每个 Actor 也可以是另一个组合。原子是不可分解的基本单元。

(惰性)函数、(惰性)运算符和(惰性)语句建立在组合之上。更准确地说,一个惰性函数(惰性运算符和语句只是惰性函数的特例)有两个阶段:

  1. (惰性)部分求值
  2. 最终求值

第一阶段由一组生成器函数、生成器函子和生成器运算符重载处理。这些是您的前端(从客户端的角度来看)。这些生成器创建的 Actor 可以像任何其他函数指针或函子对象一样传递。第二阶段,即实际的函数调用,可以随时像任何其他函数一样被调用或执行。这些是后端(通常,客户端永远不会真正看到最终调用)。

Binder(绑定器)建立在函数之上,它们从简单的单态(类似 STL)函子、函数指针、成员函数指针或成员变量指针创建惰性函数,用于延迟求值(变量通过返回数据引用的函数调用来访问)。这些绑定器建立在(惰性)函数之上。

该框架的架构是完全正交的。各层之间的关系是完全无环的。较低的层不依赖于较高的层,也不了解其存在。同一层中的模块不依赖于同一层中的其他模块。这意味着,例如,如果客户端不需要绑定器,她可以完全丢弃它;或者也许可以去掉惰性运算符和惰性语句,只使用惰性函数,这在纯 FP 应用程序中是可取的。