版权所有 © 2008 Eric Niebler
根据 Boost 软件许可证 1.0 版分发。(参见附带文件 LICENSE_1_0.txt 或复制自 https://boost.ac.cn/LICENSE_1_0.txt)
目录
“天地之间,还有许多事情,是你们的哲学里做梦也想不到的。”
——威廉·莎士比亚
Proto 是一个用于在 C++ 中构建嵌入式领域特定语言 (EDSL) 的框架。它提供用于构建、类型检查、转换和执行表达式模板[32]的工具。更具体地说,Proto 提供:
表达式模板是一种高级技术,C++ 库开发人员使用它来定义针对特定问题领域的嵌入式小型语言。这项技术已被用于创建用于线性代数的高效且易于使用的库,以及定义具有可读语法的 C++ 解析器生成器。但是,开发这样的库需要编写过多的难以阅读和维护的模板代码。Boost.Proto 简化了领域特定嵌入式语言 (EDSL)的开发。使用 Proto 定义小型语言的基元,并让 Proto 处理操作符重载和表达式解析树的构建。通过传递函数对象来立即计算表达式树。或者通过定义小型语言的语法(用 Proto 提供或由您定义的各种树转换进行装饰)来转换表达式树。然后使用该语法为无效表达式提供简短且易于理解的语法错误!不再需要复杂的模板代码——使用 Proto 开发的表达式模板库具有声明性和可读性。
简而言之,Proto 是用于定义 EDSL 的 EDSL。
本文档使用了以下命名和格式约定。
等宽字体
显示,并带有语法高亮。斜体
显示。free_function()
;也就是说,它采用代码字体,并且名称后面跟有()
表示它是一个自由函数。class_template<>
;也就是说,它采用代码字体,并且名称后面跟有<>
表示它是一个类模板。MACRO()
;也就是说,它采用代码字体大写,并且名称后面跟有()
表示它是一个类似函数的宏。对象式宏则不带尾随的()
。注意 | |
---|---|
此外,像这样的注释提供了额外的背景信息或基本原理。 |
最后,您可以心算地将以下内容添加到本文档中的任何代码片段中
// Include all of Proto #include <boost/proto/proto.hpp> // Create some namespace aliases namespace mpl = boost::mpl; namespace fusion = boost::fusion; namespace proto = boost::proto; // Allow unqualified use of Proto's wildcard pattern using proto::_;