c++ - 如何生成用于连接字符串的可变参数宏

标签 c++ c-preprocessor variadic-macros boost-preprocessor

我被困在这里了...

#define CONCAT(a,b) BOOST_PP_STRINGIZE(BOOST_PP_CAT(a,b))<br/>#define CONCAT1(a,b,c) CONCAT(CONCAT(a,b),c) and so on.

即使有 20 个参数,我如何生成 CONCAT 宏?也许我可以使用 BOOST_PP_SEQ_FOR_EACH 但我不明白该怎么做?

最佳答案

这取决于您的用例。

这个

#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/stringize.hpp>
#include <boost/preprocessor/seq/for_each.hpp>

#define SEQ (a)(b)(c)

BOOST_PP_STRINGIZE(BOOST_PP_SEQ_CAT(SEQ)) // "abc"

将连接序列然后将其字符串化。也可以简单地将每个参数字符串化,因为 "a""b""c" 相当于 "abc"

#define MY_STRINGIZE(r, data, elem) BOOST_PP_STRINGIZE(elem)
BOOST_PP_SEQ_FOR_EACH(MY_STRINGIZE, _, SEQ)

关于c++ - 如何生成用于连接字符串的可变参数宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11575241/

相关文章:

c++ - 基于预处理器的命名空间限定函数调用排除

c - 保持 Erlang 和 C 之间的定义同步

c++ - 是否可以对每个参数进行可变参数宏替换?

c++ - 将 'wchar_t*' 输出到 'ofstream'

c++ - 在 Linux 中控制鼠标

c++ - 类似命名空间的宏功能

c++ - 宏不通过直接调用扩展,而是通过间接调用扩展

c++ - 可变参数宏的 2 种不同语法

c++ - 我可以在浏览器呈现之前访问 Flash 数据吗?

C++ 类成员初始化,无需构造函数