Variadic函数调用可变参数宏

lul*_*eta 7 c++ variadic-functions variadic-macros c++11 c++14

我有一个内联的可变参数函数,
inline int foo(...)
我需要foo()调用一个宏(让我们称之为MACRO),这也是可变参数.
基本上我需要foo()将其所有输入参数传递给MACRO.foo()由于__VA_ARGS__选项,重新定义另一个宏将是一个简单的解决方案,但我还需要foo()返回一个值.
注意:我正在尝试连接已编写代码的两部分,我不允许更改它们.foo(...)用于代码的第一部分,并MACRO在第二部分中定义.我应该做的唯一事情是定义一个foo()使用MACRO而我不能,因为它们都是可变的.

Yak*_*ont 7

创建foo一个包含lambda的宏,该lambda返回一个值,然后调用该lambda.

#define foo(...) \
  [&](auto&&...args){ \
    /* do something with args, or __VA_ARGS__ */ \
    MACRO(__VA_ARGS__); \
    return 7; \
  }(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

现在int x = foo(a, b, c);将调用lambda内部foo,并在lambda内部调用宏(a, b, c),并返回一个值.

我很遗憾接下来维护你的代码.


orl*_*rlp 2

你问的是不可能的。

可变参数函数的参数在运行时确定,但宏在编译时扩展。

  • 不可能的?这是C++。 (4认同)