当前位置: 首页 > 知识库问答 >
问题:

可变函数调用可变宏

柯阳曦
2023-03-14

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

共有2个答案

夏昌胤
2023-03-14

你的要求是不可能的。

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

南宫建白
2023-03-14

生成一个宏,该宏包含返回值的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)上的宏,并且可以返回一个值。

我很同情下一个维护你代码的人。

 类似资料:
  • Scala 函数 Scala 允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。 Scala 通过在参数的类型之后放一个星号来设置可变参数(可重复的参数)。例如: object Test { def main(args: Array[String]) { printStrings("Runoob", "Scala",

  • 本文向大家介绍clojure 定义可变函数,包括了clojure 定义可变函数的使用技巧和注意事项,需要的朋友参考一下 示例 可以使用其参数列表中的符号&将Clojure函数定义为采用任意数量的参数。所有剩余的参数将按顺序收集。 致电:            

  • 问题内容: 如标题所示,我需要知道方法参数中是否存在与java对应的语法,例如 (代码由维基百科提供) 问题答案: 是的,您可以这样写:

  • 我有两个变量类成员函数。当第一个被调用时,我想创建一个std::function到第二个类成员函数,然后将的参数绑定到函数指针。 所以稍后我可以调用,而不必将所有参数传递给 我想避免使它成为模板类,并将参数存储在元组中。 我试图让以下示例起作用: 链接到live示例:http://cpp.sh/4ylm 当我编译时,我得到一个错误 模板参数推断/替换失败:17:37: 注意:无法推断模板参数“\u

  • 考虑下面的代码 在第三个例子中,我知道模板推导不能发生,这就是为什么要显式指定模板参数。但是为什么没有从到

  • 问题内容: 所有按钮都返回10。为什么? 我想要按钮1返回1,按钮2返回2 … 非常感谢您的帮助 问题答案: 您的匿名函数可以是闭包(如@abernert所指出的,在Python的情况下,它们 实际上并不是 闭包)-它们“封闭”了变量,以供以后引用。但是,它们不是在定义时查找值,而是 在调用 时查找值,这是整个循环结束 后 的某个时间(此时等于10)。 要解决此问题,您需要将的值重新绑定到其他东西