我有一个内联可变参数函数
内联 int foo(...)
我需要foo()
来调用一个宏(我们称它为MACRO
),它也是可变的。
基本上,我需要foo()
将其所有输入参数传递给MACRO
。由于 __VA_ARGS__
选项,将 foo()
重新定义为另一个宏将是一个简单的解决方案,但我还需要 foo()
返回一个值。
注意:我正在尝试连接已经编写的代码的两个部分,并且不允许更改它们。 foo(...)
用于代码的第一部分,MACRO
在第二部分定义。我唯一应该做的就是定义一个使用 MACRO
的 foo()
而我不能,因为它们都是可变的。
最佳答案
将 foo
设为包含返回值的 lambda 的宏,然后调用该 lambda。
#define foo(...) \
[&](auto&&...args){ \
/* do something with args, or __VA_ARGS__ */ \
MACRO(__VA_ARGS__); \
return 7; \
}(__VA_ARGS__)
现在 int x = foo(a, b, c);
将在 foo
中调用 lambda,并在该 lambda 中调用宏 ( a, b, c)
,并能返回一个值。
我很同情接下来维护您的代码的人。
关于c++ - 调用可变参数宏的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29949025/