c++ - 调用可变参数宏的可变参数函数

标签 c++ c++11 c++14 variadic-functions variadic-macros

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

最佳答案

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/

相关文章:

c++ - 用于查找 C++ 中移动赋值运算符的所有用法的工具

c++ - 为什么具有推导返回类型的模板不能与它的其他版本重载?

c++ - 我可以将函数指针 void* 转换为 std::function 吗?

c++ - 关于Windows API和C/C++运行时库函数的问题

c++ - 我可以强制 C++11 lambda 通过引用返回吗?

c++ - 在哪里可以看到库包含 LLVM 的哪些部分?

c++11 - std::bind 调用 std::make_shared

c++ - 部分默认使用内部类型初始化模板模板参数

c++ - 如何解决C++中的异步任务错误

c++ - 在 GCC 中处理 LPDWORD、LPSTR