【问题标题】:How can i generate variadic macro for concatenate string如何为连接字符串生成可变参数宏
【发布时间】:2012-07-20 08:01:01
【问题描述】:

我被困在这里...

#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 但我不明白该怎么做?

【问题讨论】:

  • 这个宏的参数是什么。你能举个例子吗?请记住,字符串连接可以由编译器本身完成,如果它们是字符串文字,则无需使用任何宏。

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


【解决方案1】:

这取决于你的用例。

这个

#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)

【讨论】:

    【解决方案2】:

    由于您已经在使用 Boost 库,请尝试 BOOST_PP_SEQ_CAT (documentation)。它需要一个元素列表并将它们简单地连接在一起,即BOOST_PP_SEQ_CAT(a b c) 结果为abc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多