问题标签 [variadic]

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 投票
2 回答
4601 浏览

php - 如何为可变参数函数(即参数数量未定义的函数)编写 Doxygen 注释?

我正在尝试为具有无限数量参数的函数编写 doxygen 块注释,然后我找不到合适的标签。提供的参数应该都是字符串,它们将在函数中连接起来形成一个新的字符串。

doxygen 标签的正确用法是什么?

0 投票
4 回答
1178 浏览

templates - 使用可变参数模板回调模棱两可的重载

在 C++0X 中,我想使用可变参数模板编写通用调用者/回调函数。第一个障碍:被调用者是成员函数。到现在为止还挺好。第二个障碍:有许多重载的同名成员函数。

我将如何解决这个问题?我的主要参考是这篇好文章,但我不能让它发挥作用。

好的,让我们深入了解:

但是,我无法在 yum() 中编译调用,因为重载会阻止模板解析。根据引用的文章,我应该显式创建一个函数对象

然后悠闲地打电话sendBarToID_15(f, this, 17, 29)

  1. 我怎样才能使这项工作?

  2. std::bind 魔术在最后一行中消除了“this”的加分。

  3. 以有用的方式制作 15 个参数的额外奖励积分。

非常感谢!!

0 投票
2 回答
482 浏览

templates - 使用可变参数模板进行索引

假设我有一个正在展开的参数包,例如

现在假设我有一些其他的小功能,这些对象需要通过。

我通常会替换为

但是,如果some_func需要有关参数的更多信息而不仅仅是它的类型,例如,它在参数包中的数字位置,我该怎么办?所以,而不是扩大到

我可以将其扩展到

例如?

0 投票
0 回答
1340 浏览

variadic - 如何在 jsdoc 中记录可变参数?

如何在 jsdoc 中记录可变参数?有没有办法记录类型的参数,如“字符串数组”?

0 投票
3 回答
10786 浏览

c++ - 有没有办法在可变参数宏参数上使用 C++ 预处理器字符串化?

我的猜测是这个问题的答案是否定的,但如果有办法,那就太棒了。为了澄清,假设我有以下宏:

我想做的是在将 X 的所有变量传递给可变参数函数之前以某种方式对其进行字符串化;这里的关键字是之前。我意识到没有办法真正从宏定义中访问各个参数,但是有没有办法将所有参数字符串化,可能类似于以下内容?

0 投票
1 回答
857 浏览

objective-c - 可变参数后的参数

Objective-C,或者具体来说是 Cocoa,支持可变参数,例如 class the method on NSString +(NSString *)stringWithFormat:(NSString *)string, ....

现在,我想知道的是是否可以遵循可变参数必须在方法的末尾,或者该方法可以在之后继续吗?

例如,假设我有可变参数方法(使用适当的宏),

如果我想在特定索引处使用它,我可以做这样的事情吗?

我一直在尝试,这个具体的例子不起作用,给我一条错误消息,说“预期的';' 在方法原型之后”。当然,我可以将参数打乱,以确保可变参数在最后,就像这样,

这当然有效,但对我来说,在 Cocoa 命名约定中感觉相当陌生——这对我来说是个问题。

谢谢,

0 投票
1 回答
262 浏览

templates - 这个可变参数模板参数推导正确吗?

我一直在试验可变参数模板和参数转发。我想我发现了一些不一致的行为。

为了说明,这个程序:

输出以下内容:

即使 foo 的模板特化有一个 const 引用第一个参数,可变参数是按值传递的,因为模板类型被推导出为非引用类型,如X<A>输出所示。

所以,我咨询了Thomas Becker

在这里,以下适用:

  1. 当 foo 在 A 类型的左值上调用时,T 会解析为 A&,因此,根据上面的引用折叠规则,参数类型实际上变成了 A&。

  2. 当 foo 在类型 A 的右值上调用时,T 解析为 A,因此参数类型变为 A&&。

试试这个:

哪个输出:

现在我难住了。这里有 foo 的三个调用。在我的脑海中,main()应该推断foo<A,A,A>(A&&,A&&,A&&)(因为 A() 是一个未命名的右值,因此是一个引用),它重载解析为foo<A,A,A>(const A&,A&&,A&&). 这反过来又推导foo<A,A>(A&&,A&&)出来等等。

问题是:为什么X<A,A>有 non-reference As 但X<A&>有 reference A

这会导致问题,因为我不能std::forward在递归中使用。

0 投票
1 回答
1587 浏览

c++ - 什么是 C++ 中可变参数函数的良好类型安全替代方案?

结合这个问题。我无法为以下看似基本的问题提出一个好的类型安全解决方案。我有一个音乐播放列表类,其中包含应该播放的歌曲列表。看起来很简单,只需制作队列中所有歌曲的 std::list ,并将其提供给用户即可。然而,音频解码和音频渲染在不同的线程上发生是不必要的。所以列表需要互斥保护。使用我的库的其他程序员经常忘记互斥锁。这显然导致了“奇怪”的问题。

所以一开始我只是为这个类写了setter。

这导致了如下的用户代码......

虽然这有效并且非常明确。打字非常繁琐,而且由于实际工作中的所有杂乱无章,它很容易出错。为了证明这一点,我实际上故意在上面的代码中添加了一个错误,这样的东西很容易制作,并且可能会通过代码审查原封不动,而歌曲 4 从未在播放列表 2 中播放。

从那里我去研究可变参数函数。

这将导致用户代码如下...

现在更容易查看是否添加了两次歌曲或未包含歌曲。但是在解决方案 A 中,如果 NULL 不在列表的末尾,并且不是跨平台的,它将崩溃。在解决方案 B 中,您必须计算可能导致几个错误的参数数量。此外,没有一个解决方案是类型安全的,用户可以传入不相关的类型并在运行时等待崩溃。这似乎不是一个可持续的解决方案。然后我遇到了std::initializer_list。不能使用它我开发的几个编译器还不支持它。所以我试着模仿它。我在下面得到了这个解决方案。

这种“,”运算符的使用是否被认为是错误的形式?

这将导致用户代码看起来像这样......

这种语法不会让我们的小测试组感到困惑。但是,我非常担心如此严重地滥用操作员超载。所以我发布了上面的问题。我想看看在我们的测试组中比较专家的程序员是怎么想的。很多程序员不喜欢它,但它似乎比上述解决方案更好,因为它会在编译时而不是在运行时捕获大多数错误。然而,汤姆发布了一个有趣的反例,这会导致意外行为。

这让我对那个解决方案感到厌烦。那么您对更好的解决方案有什么想法吗?

PS 上面的代码都没有被编译,它们只是为了示例目的。

0 投票
1 回答
2556 浏览

javascript - 在Javascript中的可变参数函数内调用可变参数函数?

我有两个函数 a() 和 b(),它们都是可变参数函数,比如说当我像这样调用函数 a() 时:

那么函数 b() 也将在 a() 中被调用,但在 a() 的参数列表中没有第一个参数“arg0”:

有什么办法吗?

0 投票
2 回答
724 浏览

c - C - 将 va_list 传递给哨兵终止函数 - 需要 execlp() 的包装器

我正在尝试为 execlp() 编写一个包装器。为什么这不起作用?是哨兵吗?

提前感谢您的任何答案!