【发布时间】:2014-01-03 09:57:39
【问题描述】:
我想定义一个宏,它将为每个不是前缀的参数添加前缀。
我定义了一些常量参数计数宏,然后定义了一个使用可变参数来调用其他宏。我的问题是 varadic 宏没有为常量宏提供正确的输入。
#define prefix2(pefixV, a1, a2) pefixV##a1, pefixV##a2
#define prefix3(pefixV, a1, a2, a3) prefix2(pefixV, x, y)##, ##pefixV##z
#define prefixX(count, pefixV, ...) prefix##count(pefixV, __VA_ARGS__)
//MacroTester from stackoverflow
#define QUOTE(str) #str
#define EXPAND_AND_QUOTE(str) QUOTE(str)
#define TESTE EXPAND_AND_QUOTE(TEST)
int main(int argc, const char* argv[])
{
#define TEST prefixX(2, simplePrefix, X, Y)
static_assert(false, TESTE);
return 0;
}
静态断言打印:static assertion failed with "simplePrefixX, Y, simplePrefix"
我的预期结果是simplePrefixX, simplePrefixY
有没有办法强制可变参数宏提供正确的输入?
我可以在这个项目中使用 Visual Studio 2012 或 2013
【问题讨论】:
-
您可以考虑使用
BOOST_PP_OVERLOAD,这样您就不必将计数传递给prefixX。
标签: c++ visual-studio macros