促进 C++库

……其中一个世界。 赫伯·萨特安德烈亚历山德雷斯库,C类++编码标准

这是旧版本Boost的文档。单击此处查看此页面的最新版本。
下一步

第1章变量宏数据库1.9

爱德华 迪纳

目录

介绍
命名约定
为什么和如何使用
使用可变宏
Visual C++定义
功能组
数据类型
用于工作的特定宏具有数据类型
空虚
约束
标识符
数字
类型
虚拟机管理和Boost PP数据类型
识别数据类型
用于工作的通用宏具有数据类型
正在分析序列
正在转换序列
正在访问序列元素
得到数据的类型
测试平等与不平等
带有修改器的宏
返回类型修饰符
过滤修改器
标识符修改器
正在拆分修改器
索引修改器
修改人和单元素序列
标识符亚型
有用的可变宏不在Boost PP中
断言和数据类型
生成空虚与身份
功能用于“空”序列和元组
控制内部使用
增压PP再入版本
动态输入类型
Visual C++进入虚拟机管理
版本1.7到1.8的转换
使用VMD功能的示例
可变宏观数据参考
标题<boost/vmd/array/to_seq.hpp>
标题<boost/vmd/list/to_seq.hpp>
标题<boost/vmd/to_seq.hpp>
标题<boost/vmd/tuple/to_seq.hpp>
标题<boost/vmd/array/to_tuple.hpp>
标题<boost/vmd/list/to_tuple.hpp>
标题<boost/vmd/seq/to_tuple.hpp>
标题<boost/vmd/to_tuple.hpp>
标题<boost/vmd/assert.hpp>
标题<boost/vmd/assert_is_array.hpp>
标题<boost/vmd/assert_is_empty.hpp>
标题<boost/vmd/assert_is_identifier.hpp>
标题<boost/vmd/assert_is_list.hpp>
标题<boost/vmd/assert_is_number.hpp>
标题<boost/vmd/assert_is_seq.hpp>
标题<boost/vmd/assert_is_tuple.hpp>
标题<boost/vmd/assert_is_type.hpp>
标题<boost/vmd/elem.hpp>
标题<boost/vmd/empty.hpp>
标题<boost/vmd/enum.hpp>
标题<boost/vmd/equal.hpp>
标题<boost/vmd/get_type.hpp>
标题<boost/vmd/identity.hpp>
标题<boost/vmd/is_array.hpp>
标题<boost/vmd/is_empty.hpp>
标题<boost/vmd/is_empty_array.hpp>
标题<boost/vmd/is_empty_list.hpp>
标题<boost/vmd/is_identifier.hpp>
标题<boost/vmd/is_list.hpp>
标题<boost/vmd/is_multi.hpp>
标题<boost/vmd/is_number.hpp>
标题<boost/vmd/is_parens_empty.hpp>
标题<boost/vmd/is_seq.hpp>
标题<boost/vmd/is_tuple.hpp>
标题<boost/vmd/is_type.hpp>
标题<boost/vmd/is_unary.hpp>
标题<boost/vmd/not_equal.hpp>
标题<boost/vmd/seq/is_vmd_seq.hpp>
标题<boost/vmd/seq/pop_back.hpp>
标题<boost/vmd/tuple/pop_back.hpp>
标题<boost/vmd/seq/pop_front.hpp>
标题<boost/vmd/tuple/pop_front.hpp>
标题<boost/vmd/seq/push_back.hpp>
标题<boost/vmd/tuple/push_back.hpp>
标题<boost/vmd/seq/push_front.hpp>
标题<boost/vmd/tuple/push_front.hpp>
标题<boost/vmd/seq/remove.hpp>
标题<boost/vmd/tuple/remove.hpp>
标题<boost/vmd/seq/size.hpp>
标题<boost/vmd/size.hpp>
标头<boost/vmd/tuple/size.hpp>
标题<boost/vmd/seq/to_array.hpp>
标题<boost/vmd/to_array.hpp>
标题<boost/vmd/tuple/to_array.hpp>
标题<boost/vmd/seq/to_list.hpp>
标题<boost/vmd/to_list.hpp>
标题<boost/vmd/tuple/to_list.hpp>
标题<boost/vmd/tuple/is_vmd_tuple.hpp>
设计
编译器
历史
致谢
索引

欢迎使用Variadic宏数据库。

变分宏数据库,以下简称为VMD,是提供功能增强的可变宏库在Boost预处理器库(Boost PP)中,尤其是与预处理器数据类型。

VMD具有特定功能的预处理器数据类型为空,标识符、数字(标识符子集)、类型(标识符子集)Boost PP数组、Boost PP列表、Boost PP-seqs、Boost聚丙烯元组和序列。前四种是基本的预处理器数据类型,后五种是复合预处理器数据类型。一个序列等于或大于另一个序列预处理器数据类型相互跟随。

数据类型示例

表1.1.数据类型及示例

类型

例子

标识符

任意名称

47

类型

引导_VMD_TYPE_NUMBER

阵列

(4,(标识符,156,BOOST_VMD_TYPE_identifier)

列表

(78,(some标识符,(BOOST_VMD_TYPE_TYPE,BOOST_PP_NIL))

序列

(标识符)(89)(245)

元组

(any_id,175,BOOST_VMD_TYPE_LIST,高兴,21)

序列

树59(56,BOOST_VMD_TYPE_SEQ)(128)(火)(小丑)(47,(BOOST_VM D_TYPE_TUPLE,BOOST_PP_NIL))


空是指缺少任何预处理标记。展开为的宏没有,如:

#定义 返回_无(x个)

据说是为了回归空虚。相反,宏在被调用时不能接受任何内容,例如:

返回_无()

最后,空可以是任何复合数据类型的一部分,如下所示:

(45,,某个名称)

其中第二个tuple元素为空。

什么优势是什么?

VMD可以识别前面提到的任何预处理器数据类型,并且可以将序列解析为各自的预处理器数据类型。你可以我们问问为什么这很重要。

在Boost PP宏编程中,大量的控制逻辑设计宏基于Boost PP对数字和测试的支持数值,尤其是表示布尔选择的0和1。基本上Boost PP通常使用数值来控制宏中的逻辑设计。

VMD不会以任何方式试图复制Boost PP对测试的支持数字或布尔值0或1的值,但只重用功能。VMD提供的系统超越了Boost PP解码预处理器数据类型,并比较任何预处理器与任何给定值相等的数据类型。这允许设计宏逻辑以更灵活的方式,取决于数据类型和/或数据。如果你对此感兴趣,请继续阅读,了解如何使用VMD进行宏编程。

功能地区

库的功能可以概括为:

  1. 提供测试和使用空参数和空参数的更好方法预处理器数据。
  2. 提供标识符、数字、类型、元组、,数组、列表和序列。
  3. 提供测试/分析标识符、数字、类型、,元组、数组、列表。和seqs。
  4. 提供Boost PP中没有的一些有用的可变宏。

该库是一个只有标题的库,库中的所有宏都包含在内通过名称为“vmd.hpp”的单个标头。可以使用单独的标题用于库中的不同功能,并且将在该功能时表示已解释。

库中的所有宏都以序列“BOOST_VMD_”开头,以区分它们来自最终用户可能使用的其他宏。因此,最终用户应不使用任何C++标识符,无论是在宏中还是在其他情况下序列“BOOST_VMD_”。

库的使用仅依赖于Boost PP。库也使用Boost为自己的测试详细介绍lightweighttest.hpp。

上次修订时间:2018年4月11日13:53:22 GMT


下一步