Boost C++ 库

...世界上最受推崇和经过精心设计的C++库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码规范

PrevUpHomeNext

使用可变参数宏

可变参数宏,如 C++11 规范所定义的,是一个从 C99 规范中提取的特性。 它们是指接受一个用 '...' 表示的最终参数的宏,这个最终参数代表宏的多个最终参数,这些参数以逗号分隔的标记序列形式存在。 在宏展开中,一个特殊的关键字 __VA_ARGS__ 代表这些逗号分隔的标记。 我将传递给可变参数宏的这些信息称为“可变参数宏数据”,这也是该库名称的由来。 更通用的术语“可变参数数据”在本文档中用于指定传递给宏的数据,这些数据可以包含任意数量的宏标记作为单个宏参数,例如在 Boost PP 数据类型中发现的那样。

该库假定支持可变参数宏。如果编译器不支持可变参数宏,则库中的宏将因预处理器错误而失败。 在此库的早期版本中,可变参数宏支持由 Boost Preprocessor 库中的类对象宏 BOOST_PP_VARIADICS 的值确定,因此如果此宏返回 0,则不会定义库中的任何宏。 现在情况已经改变,因为 Boost 预处理器库现在也需要可变参数宏支持,并且 BOOST_PP_VARIADICS 始终返回 1。

这对最终用户意味着必须在 C++11 或更高模式下使用编译器,或者 C++98/C++03 模式下的编译器支持可变参数宏。 许多主要的编译器,包括 Visual C++、gcc 和 clang,只要不通过该编译器的编译器标志启用对 C++98/C++03 标准的严格遵守,都可以在 C++98/C++03 模式下支持可变参数宏。


PrevUpHomeNext