c++ - 使用另一个可变参数函数的未命名参数调用可变参数函数

标签 c++ c variadic-functions

我有两个可变函数作为 foo(format, ...)bar(format, ...)。我想实现函数 foo 以便它可以使用相同的参数列表调用 bar 。也就是说,

foo(format...)
{
 ...
 bar(format, ...);
}

例如,调用 foo("(ii)", 1, 2) 将调用具有相同参数的 bar bar("(ii)", 1, 2)。这个foo函数应该怎么实现呢?

PS:bar 函数来自旧版库,我无法更改其界面。

最佳答案

这是不可能的,只要你拥有的只是一堆带有 ... 参数的 if 函数。

你必须提前计划这样的事情,并以两阶段的方式实现每个可变参数函数

void vfoo(format, va_list *args) {
  /* Process `*args` */
}

void foo(format, ...) {
  va_list args;
  va_start(args, format);
  vfoo(format, &args);
  va_end(args);
}

通过一对 va_list * 函数和 ... 函数实现每个可变参数函数后,您可以使用 va_list 委托(delegate)调用* 函数的版本

void vfoo(format, va_list *args) {
  ...
  vbar(format, args);
  ...
}

关于c++ - 使用另一个可变参数函数的未命名参数调用可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5383642/

相关文章:

c - 通过引用访问 va_arg 宏是错误的风格还是不正确的?

c++ - 如何从 main 中的数组打印总计

C++ cout 字符串打印其内存值

c - 带有静态数组的动态堆栈 C

c++ - 最优雅的可变函数

java - 为什么 Java 不将 int[] 传递给 vararg?

c++ - 点绕 z 轴旋转

c++ - 删除指针是否也会删除它指向的内存?

c - 如何知道进程是父进程还是子进程

c - fprintf 以错误的顺序打印数据