c++ - 返回传递给它的参数数量的可变参数函数

标签 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 ! 我仍然想了解为什么它不起作用。我看到两个选项:

  • 我设计算法的方式有问题,导致它出现故障。

  • 函数接受的参数比显式提供给它的参数多得多。

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

最佳答案

既然你标记了 C++11,你应该考虑 parameter packs制作你的功能:

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

正如在主帖的评论中所见,sizeof...() 运算符在这种情况下将返回模板参数包的大小。

关于c++ - 返回传递给它的参数数量的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50179166/

相关文章:

c++ - posix_spawn 创建一个僵尸进程并返回成功

c++ - 谢尔宾斯基三角形的周长

c++ - 模板特化与默认值

c++ - 在此类的声明中声明一个类的实例并就地初始化它

c++ - 打印 std::this_thread::get_id() 给出 "thread::id of a non-executing thread"?

c++ - CGAL 修改现有的多边形

c++ - 什么时候 const 引用比 C++11 中的按值传递更好?

c++ - 在 C++11 中处理零参数可变参数模板

c++ - 使变量不可复制的紧凑方法

C++模板语法