我需要编写一个函数,它接受可变数量的争论,它本质上是一个围绕snprintf
类函数的包装器。我理解如何执行此操作,如Passing variable number of arguments around所示。
看来,至少在C中,我们需要在变量参数start(Why is void f(...) not allowed in C?)之前将一个命名参数传递给函数。
然而,相同问题的答案表明这在C ++中很容易实现。我想知道如何实现这一点,特别是因为处理vararg函数的方法似乎与C
(va_start
等)相同。或者他们是指可变参数模板?
所以基本上可以编写一个没有命名参数的可变参数函数,如下所示,如果是这样,怎么办?
void f(...){
...
}
P.S。如果可能的话,我想用c ++ 03来做这件事。
答案 0 :(得分:4)
虽然C ++语言允许编写参数列表仅包含...
的函数,但该语言无法访问用(...)
参数列表声明的函数中的参数。
基本上C ++中的这些函数存在于它们在重载决策中的行为(...
参数匹配任何参数类型)。这样的函数的主体将无法访问参数。如果您没有看到此类功能的用途,请不要使用它们。
这些函数通常用于一些众所周知的模板元编程技术中的非执行上下文中,在这种情况下甚至不必定义它们 - 仅仅是声明就足够了。