C++ 带“的宏”;占位符;价值

C++ 带“的宏”;占位符;价值,c++,c++11,c-preprocessor,variadic-macros,C++,C++11,C Preprocessor,Variadic Macros,我正在使用一个包含一组预处理器库的库。其中一个是FOR_EACH样式的宏,它在\uu VA_ARGS\uu上迭代,并为每个参数调用用户提供的宏。用户提供的宏称为:SOME\u宏(当前参数) 但是,问题是它只适用于用户提供的带有单个参数的宏。我正在尝试做一些特殊的事情,包括struct的名称和struct中的每个字段。问题是,这需要宏的两个参数 由于我正在使用的库只接受一元宏,有没有办法将附加参数“绑定”到我的宏 现在,我必须在宏中硬编码结构的名称。因此,如果我正在使用的struct名为Foo,我

我正在使用一个包含一组预处理器库的库。其中一个是FOR_EACH样式的宏,它在
\uu VA_ARGS\uu
上迭代,并为每个参数调用用户提供的宏。用户提供的宏称为:
SOME\u宏(当前参数)

但是,问题是它只适用于用户提供的带有单个参数的宏。我正在尝试做一些特殊的事情,包括
struct
的名称和struct中的每个字段。问题是,这需要宏的两个参数

由于我正在使用的库只接受一元宏,有没有办法将附加参数“绑定”到我的宏

现在,我必须在宏中硬编码结构的名称。因此,如果我正在使用的
struct
名为
Foo
,我必须说:

#define MY_MACRO(FIELD) /* do something with &Foo::FIELD */
是否有某种方法可以将第二个
STRUCT
参数“绑定”到宏,可能需要一些进一步的间接操作,以便库调用我的宏时,它可以展开为:

#define MY_MACRO(FIELD) /* do something with &STRUCT::FIELD */

对。您可以使用以下技巧

#define MY_MACRO(FIELD) EXPAND FIELD
#define EXPAND(X, FIELD) X::FIELD()
在以下测试代码中使用:

struct foo { static int f() { return 0; } };
struct STRUCT { static int f() { return 1; } };

#define MY_MACRO(FIELD) EXPAND FIELD
#define EXPAND(X, FIELD) X::FIELD()

int main ()
{
  int i = MY_MACRO((STRUCT,f)); // see here braces inside braces
}
上述代码扩展为

int main ()
{
  int i = STRUCT::f();
}

也许你可以让
字段
成为
(A,B)
,这样
A
就是
STRUCT
的值,
B
就是
字段的值(在你的扩展中)?我想知道这是否可行。添加了预处理器标签,允许搜索@iammilind.hack:)解释的技术