是否可以获取可变参数上的参数数量?

问题描述

我一直在研究如何使用可变数量的参数声明函数或类成员,并且遇到了可变参数函数,但是我想知道是否有某种方法可以访问传递给函数的参数数量,,而不必像大多数文档所介绍的那样直接将其作为第一个参数传递。我也知道我可以使用可变参数模板或std::initializer_list,但是由于我希望传递多个相同类型的参数 ,所以这些参数看起来太通用和/或复杂语法。

#include <cstdarg>

bool func(int args...) {
    va_list list;
    va_start(list,args);   
    int val = args;
    while(val >=0) {
        std::cout << val << std::endl;
        val = va_arg(list,int);
    }
    return true;
}

bool other_func(int c,int args...) {
    va_list list;
    va_start(list,args);   
    int val = args;
    for (int i = 0; i<c; i++) {
        std::cout << val << std::endl;
        val = va_arg(list,int);
    }
    return true;
}

int main(int argc,char const *argv[]) {
    func(2,7,47,-1,23 /* ignored */);
    other_func(3 /* n of parameters */,2,47);

    return 0;
}

在这些特定示例中,func循环遍历输入自变量,直到找到负值(以说明问题并强制停止标志),而other_func要求将自变量数量设置为作为第一个参数传递。在我看来,这两种实现方式都存在缺陷和不安全之处,是否有更好的方法来解决此问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)