调用可变参数宏的可变参数函数

Variadic function calling a variadic macro

本文关键字:变参 参数 函数 调用      更新时间:2023-10-16

我有一个内联可变参数函数
inline 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)上的宏,并且可以返回一个值。

我可怜接下来维护你的代码的人。

你问的是不可能的。

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