问题标签 [variadic-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1499 浏览

java - 使用可变数量的参数委托方法调用

这个问题出现在我的工作编程过程中;它与当前的任务无关,但我仍然很好奇是否有人有答案。

在 Java 1.5 及更高版本中,您可以使用可变数量的参数来使用方法签名,并使用省略号语法:

假设我想对 foos 列表中的每个 foo 执行一些操作,然后将此调用委托给我的对象上的某个字段,并保留相同的 API。我该怎么做?我想要的是这样的:

这不编译。我怎样才能做到这一点(将可变数量的 MyFoo 传递给 run(MyFoo...) 方法)?

0 投票
4 回答
3018 浏览

c - 如何调用具有可变数量参数的函数?

如何execlp()为不同的进程调用可变数量的参数?

0 投票
4 回答
299 浏览

c++ - 存储类型的类型以处理变量参数列表

是否可以按照以下方式做一些事情:

以相对微不足道的方式?我知道的唯一可以保存类型的对象是 type_info ,我不知道如何以这种方式使用它。

谢谢,帕特里克

0 投票
4 回答
4197 浏览

objective-c - Objective-C va_list 和选择器

是否可以使用@selectorperformSelector:(或类似)使用可变参数列表的方法?

我正在编写一个可以分配一个委托来覆盖默认行为的类。在存在委托的情况下,对该类的实例进行的选择方法调用将转发到相同的相应委托方法,其中一些使用可变参数列表。

因此,例如,我需要能够创建检索SEL引用并使用如下方法向委托对象发送消息:

我假设这是不可能的,因此 Foundation 框架中的类似方法声明 - 在NSString

我假设我希望委托给的协议应该建议实施:

所以我@selector(logEventWithFormat:arguments:)可以使用选择器来调用:

我只是想知道我是否遗漏了一些东西,或者为了实现我想要的东西而走了很长一段路?

0 投票
3 回答
1993 浏览

delphi - 在 Delphi 中通过其内存地址调用可变参数 C 函数

假设我在 C++ 中有一个函数,我在其中使用指向其内存地址的指针调用它,并使用typedef. 现在,我怎样才能在 Delphi 中做同样的事情?

例如:

然后,我可以用:Function("string", etc);.

在 Delphi 中,有没有办法在不使用汇编指令的情况下做到这一点?

请注意,它是一个可变参数函数。

0 投票
8 回答
7247 浏览

java - 为什么 Java 的 main 不使用可变长度参数列表?

main我对 Java声明的语法有疑问:

由于在调用 main 函数时可以传递可变数量的字符串,所以这不应该是可变长度参数列表而不是数组吗?为什么使用字符串参数列表对该方法的命令行调用甚至可以工作?(除非有幕后处理使用字符串列表构建一个数组,然后将该数组传递给 main 方法......?) main 声明不应该更像这样......?-

0 投票
2 回答
294 浏览

c++ - 将可变数量的参数传递给别名函数

采用像 printf 这样的函数,它接受可变数量的参数,我想做的是将这些可变数量的函数传递给子函数而不改变它们的顺序。这方面的一个例子是将 printf 函数别名为一个名为 console ...

例如,如果我这样做了console("Hello %s", sName),我也希望将名称传递给 printf 函数,但它必须能够像 printf 已经接受的那样继续接受可变数量的参数。

0 投票
2 回答
3040 浏览

c - 操纵可变参数的标准方法?

va_list这是一个奇怪的问题,但是在将 a 的内容传递给另一个函数之前,有没有一种标准的方法来操作它的内容?例如,假设我有两个函数,sum并且vsum

如果我调用sumas sum(4, 1, 2, 3, 4),我希望得到结果 10。现在假设不是vsum直接调用,而是sum调用一个中间函数,vsum_stub该函数执行以下操作:

现在,当我调用 时sum(4, 1, 2, 3, 4),我应该返回结果 20,因为将 2vsum_stub中的所有值递增va_list。这当然不会编译,因为您不能获取va_arg. 还有另一种方法可以做到这一点吗?我在 C99 工作。


背景:

我正在开发一个库,该库进行一些指针转换,以便数据可以以更有效的格式存储在堆上。程序使用自定义转换进行编译,该转换将调用转换为库函数printf,例如我自己的存根函数(例如hc_printf)。在将参数传递给真正的函数之前,hc_printf需要翻译任何指针参数(用于 的字符串) 。%sprintf

编辑:这是一个代码示例。假设我们有一个字符串foofoo是动态分配的,修改后的版本malloc返回一个假指针。编译器修改程序以便它可以处理假指针。所以这有效:

我想写一个fake_vprintf这样的函数(在伪代码中):

该程序将fake_vprintfvprintf使用假指针的原始程序一样调用。fake_vprintf将假指针转换为真实vprintf可以使用的真实指针。

0 投票
2 回答
2048 浏览

actionscript-3 - 从带有可变参数的 actionscript 构造函数调用 super()

如果构造函数将其参数作为可变参数(...),则似乎不可能创建一个仅将该可变参数传递给超类的子类。

对于普通函数,有一个与此相同情况的修复相关的问题:Wrapping a Vararg Method in ActionScipt但我无法让它与超级调用一起使用。

基类:

子类:

如果我现在打电话

我得到输出

我希望它打印出来:

除了实际将参数的处理移至子类或将其移至单独的初始化方法之外,有谁知道如何正确调用超级调用?

0 投票
4 回答
6617 浏览

delphi - Delphi“const数组”到“varargs”

请帮忙!我需要这种转换来为 Delphi 的一些 C 头文件编写包装器。

举个例子:

如何将“const 数组”转换为“varargs”?

编辑:函数PushString实际上是在记录里面(我给出了一个简化的例子),我没有直接访问pushfstring的权限。不包括直接呼叫。

编辑 2:我为 Delphi 编写了 LUA 库的单元,这个案例对我来说非常重要。

指定并提供所有细节 - 我在 C 中有这个功能:

在德尔福我有这样的事情:

LuaLibrary.pas

dtxLua.pas

而在 Lua.pas 等其他单元中,我只使用 dtxLua.pas 中的 TLuaState(因为 LuaLibrary 体积庞大,dtxLua 是我的包装器),用于许多有用和酷的东西......