4

我需要编写一个接受可变数量争论的函数,它本质上是一个snprintf类似函数的包装器。我一般理解如何执行此操作,如传递可变数量的参数中所示。

无论如何,至少在 C 中,我们需要在变量参数开始之前将一个命名参数传递给函数(为什么 void f(...) 在 C 中不允许?)。

然而,相同问题的答案表明这在 C++ 中很容易实现。我想知道如何实现这一点,特别是因为处理可变参数函数的方法似乎与C(va_start等) 相同。还是他们指的是可变参数模板?

所以基本上可以编写一个没有命名参数的可变参数函数,如下所示,如果可以,怎么做?

void f(...){
   ... 
}

ps 如果可能的话,我想用 c++03 来做这件事。

4

1 回答 1

4

虽然 C++ 语言允许编写参数列表仅包含 的函数...,但该语言不提供访问用(...)参数列表声明的函数中的参数的方法。

基本上,C++ 中的此类函数因其在重载解析中的行为而存在(...参数匹配任何参数类型)。此类函数的主体将无法访问参数。如果您看不到此类功能的用途,请不要使用它们。

在一些著名的模板元编程技术中,此类函数通常在非执行上下文中使用,在这种情况下,它们甚至不必定义——仅仅声明就足够了。

于 2012-12-14T01:59:31.427 回答