如何使用 BOOST_PP_SEQ_FOR_EACH 为序列中的每个执行函数?

问题描述 投票:0回答:1

我打算使用 BOOST_PP_SEQ_FOR_EACH 为序列的所有变量运行函数:

#include <iostream>
#include <boost/preprocessor.hpp>
#include <boost/preprocessor/seq/for_each.hpp>


#define SEQ (w)(x)(y)(z)
#define MACRO(r, data, elem) foo(#elem);

using namespace std;


void foo(string a) {
  cout << a << endl;
}


int main(){


  BOOST_PP_SEQ_FOR_EACH(MACRO, ,SEQ) ;


  return 0 ;
}

预期输出如下:

w
x
y
z

,而实际结果是:

BOOST_PP_SEQ_HEAD((w)(x)(y)(z))
BOOST_PP_SEQ_HEAD((x)(y)(z))
BOOST_PP_SEQ_HEAD((y)(z))
BOOST_PP_SEQ_HEAD((z))

我不知道扩展会发生什么。我认为 BOOST_PP_SEQ_FOR_EACH 子句扩展为

MACRO(r, ,w) MACRO(r, ,x) MACRO(r, ,y) MACRO(r, ,z)

并且 MACRO(r, ,w) 被扩展为

foo("w");
例如。

c++ boost foreach macros preprocessor
1个回答
1
投票

BOOST_PP_SEQ_HEAD((a)(b)(c))
是一个宏,用于获取预处理器序列的头部,并将扩展为
a
。但是
#elem
阻止该宏被扩展。

也可以使用

BOOST_PP_STRINGIZE
来展开宏:

#define MACRO(r, data, elem) foo(BOOST_PP_STRINGIZE(elem));
© www.soinside.com 2019 - 2024. All rights reserved.