当前位置: 首页 > 知识库问答 >
问题:

有可能得到变量函数的参数数吗?

彭礼骞
2023-03-14

我一直在研究如何使用可变参数数声明函数或类成员,并且遇到了可变函数,但是我想知道是否有某种方法可以访问传递给函数的参数数,而不必像大多数文档中所示的那样,直接将其作为第一个参数传递。我还知道,我可以使用变量模板或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, 7, 47);

    return 0;
}

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

共有1个答案

严阳秋
2023-03-14

因为我要传递多个相同类型的参数

这正是std::initialiser_list 所提供的。

你似乎搞错了变量函数。声明int args...并不意味着“一定数量的int参数”,而是意味着“一个int命名的参数,后跟任意数量的任意类型的参数”

 类似资料:
  • 问题内容: 如标题所示,我需要知道方法参数中是否存在与java对应的语法,例如 (代码由维基百科提供) 问题答案: 是的,您可以这样写:

  • Scala 函数 Scala 允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。 Scala 通过在参数的类型之后放一个星号来设置可变参数(可重复的参数)。例如: object Test { def main(args: Array[String]) { printStrings("Runoob", "Scala",

  • Windows 10、Visual Studio 2019、C 17: 编译错误:无法将参数2从“int(\u cdecl*)(int)”转换为“…” 如果没有模板(int func(int size)),代码编译正常。如何修改它以使编译器理解可变参数?

  • 问题内容: 是否可以从数组向JavaScript函数发送可变数量的参数? 我最近写了很多Python,能够接受并发送varargs是一个很棒的模式。例如 是否有可能在JavaScript发送待处理数组 作为 参数数组? 问题答案: 更新 :从ES6开始,您可以在调用函数时简单地使用 传播语法 : 由于ES6还希望将参数视为数组,因此还可以在参数列表中使用传播语法,例如: 并且可以将其与常规参数结合

  • Scala允许您指示可以重复函数的最后一个参数。 这允许客户端将可变长度参数列表传递给函数。 这里,print字符串函数中的args类型(声明为“String *”类型)实际上是Array [String]。 试试下面的程序,这是一个用参数显示函数的简单例子。 例子 (Example) object Demo { def main(args: Array[String]) { p

  • 我有两个变量类成员函数。当第一个被调用时,我想创建一个std::function到第二个类成员函数,然后将的参数绑定到函数指针。 所以稍后我可以调用,而不必将所有参数传递给 我想避免使它成为模板类,并将参数存储在元组中。 我试图让以下示例起作用: 链接到live示例:http://cpp.sh/4ylm 当我编译时,我得到一个错误 模板参数推断/替换失败:17:37: 注意:无法推断模板参数“\u

  • 问题内容: 我有一个PHP函数,该函数需要可变数量的参数(使用和),但是我要传递给该函数的参数数量取决于数组的长度。有没有一种方法可以使用可变数量的参数来 调用 PHP函数? 问题答案: 如果参数在数组中,则该函数可能会对您有兴趣。 如果您要传递的参数数量取决于数组的长度,则可能意味着您可以将它们自己打包到数组中-并将其用于第二个参数。 然后,您传递给该数组的元素将作为不同的参数被函数接收。 例如

  • 本文向大家介绍php定义参数数量可变的函数用法实例,包括了php定义参数数量可变的函数用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php定义参数数量可变的函数用法。分享给大家供大家参考。具体分析如下: php中的的函数参数可以不固定,甚至不用定义参数,在函数内部使用func_get_args()函数获得参数列表,调用时可以为函数指定任意参数,非常方便 希望本文所述对大家的php