版权所有 © 2008 Eric Niebler
根据 Boost 软件许可协议 1.0 版本分发。(请参阅随附文件 LICENSE_1_0.txt 或访问 https://boost.ac.cn/LICENSE_1_0.txt 复制许可协议)
目录
“天地之间,霍雷肖,存在着比你哲学所梦想的更多的事情。”
-- 威廉·莎士比亚
Proto 是一个用于在 C++ 中构建嵌入式领域特定语言的框架。它提供了构建、类型检查、转换和执行表达式模板[27]的工具。更具体地说,Proto 提供了:
表达式模板是一种先进的技术,C++ 库开发人员使用它来定义针对特定问题领域的嵌入式迷你语言。该技术已被用于创建高效且易于使用的线性代数库,以及定义具有可读语法的 C++ 解析器生成器。但是,开发这样的库需要编写大量的难以理解和维护的模板乱码。Boost.Proto 简化了领域特定嵌入式语言 (EDSL)的开发。使用 Proto 定义您的迷你语言的基元,并让 Proto 处理运算符重载和表达式解析树的构建。通过将表达式树传递给函数对象来立即评估表达式树。或者通过定义您的迷你语言的语法来转换表达式树,该语法使用 Proto 提供或由您定义的一系列树变换进行修饰。然后使用语法为您的用户提供针对无效表达式的简短且可读的语法错误!不再有乱码——使用 Proto 开发的表达式模板库是声明式的且可读的。
简而言之,Proto 是一个用于定义 EDSL 的 EDSL。
本文档使用以下命名和格式约定。
fixed width font
字体,并进行语法高亮显示。斜体
。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::_;