Variadic函数,返回传递给它的参数数量

时间:2018-05-04 16:11:02

标签: c++ c++11

我尝试实现一个函数,该函数返回传递给它的参数个数。这是代码:

int SIZE(int n, ...){

va_list ARGS;
va_start (ARGS, n);
int length(0);

void* current_arg;
do{
    current_arg=va_arg(ARGS, void*);
    length++;
}while( current_arg != nullptr);

va_end(ARGS);
return length;

}

在此之前我做过一些研究,所以我知道它不会去上班。事实上它并没有:当我通过两个论点时,它返回了12个! 我仍然想明白为什么它不起作用。我看到两个选择:

  • 我设计算法的方式存在问题,导致其出现故障。

  • 一个函数需要更多明确赋予它的参数。

我还没有编程很长时间,所以我喜欢尝试这种东西。 你能帮我弄清楚我的功能有什么问题吗? 感谢

1 个答案:

答案 0 :(得分:6)

由于您标记了C ++ 11,因此您应该考虑使用parameter packs来实现您的功能:

template<typename... T>
constexpr unsigned numberOfArguments(const T&... args)
{
    return sizeof...(T);
}

正如主帖上的评论所示,sizeof...()运算符将返回模板参数包的大小。