调用可变参数宏的可变参数函数
Variadic function calling a variadic macro
我有一个内联可变参数函数
inline 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)
上的宏,并且可以返回一个值。
我可怜接下来维护你的代码的人。
你问的是不可能的。
可变参数函数的参数在运行时确定,但宏在编译时扩展。
相关文章:
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 如何使用可变参数模板强制转换每个变体类型
- 关于如何在具有单个参数的变体构造中选择替代方案?
- 调用参数排列不变函数 f(i++, i++)
- 参数归纳与标准::变体
- 模板化回调参数的逆变,如 C# 中的逆变
- 如何在没有参数包的情况下编写变差函数
- 通过具有嵌套类的工厂类获取多个变异类模板参数包
- 获取模板参数的成员变量值列表
- 保留短 lambda 用作函数的中间参数,使用 clang 格式保持不变
- 如何定义变体<x,y,z>提取模板参数的子类型
- 正确对齐内存模板,参数顺序不变
- 递归中不同参数类型的变元模板函数
- 通过函数指针传递给变差函数的参数会更改其值
- 提升预定义为带有参数的全局 lambda 的变体访问者
- 使用可变参数模板参数提升变体访问者
- boost ::变体 - 为什么模板参数比const字符串参数具有更高的优先级
- 将变参数包中的值加载到临时数组中
- 使用额外参数提升变体访客
- 从变长参数列表中提取std::string