问题标签 [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 投票
4 回答
7660 浏览

c++ - 为什么 `boost::any` 比 `void*` 更好?

与使用and相比,boost::anyboost::any_cast提供了哪些固有优势?void*dynamic_cast

0 投票
3 回答
5086 浏览

c++ - 重复使用可变参数函数参数不起作用

我有一个尝试将内容记录到控制台和日志文件的功能,但它不起作用。可变长度参数的第二次使用会将垃圾写入控制台。有任何想法吗?

0 投票
1 回答
867 浏览

c++ - 包装任何 API 函数

我正在包装 Windows API,我希望使错误检查易于使用且有用。目前,我有一个全局错误对象,具有set处理新错误的函数。该set函数接受四个参数:bool Error::set (const int code, const char * file, const char * const function, const int line);该函数使用文件、函数和行参数以格式良好的消息显示它们。

为了简化错误的设置,有一个宏#define setError() error.set (GetLastError(), __FILE__, __FUNCTION__, __LINE__);这样我可以setError()在任何时候通过在调用 API 函数后添加它来响应 API 函数设置的错误。

不幸的是,这会导致代码看起来像这样:

构造函数也存在问题:

如您所见,通过使用成员初始化器语法,我实际上是在限制自己。

解决此问题的一种方法是包装每个 API 函数:

错误消息的function部分会告诉我是哪个函数导致了错误。当然,这必须是处理这个问题的最糟糕的方法。

解决方案似乎是使用可变参数模板。问题是,我不知道我应该怎么做才能让他们为此工作。我想最终的代码看起来像以下之一:

我已经阅读了有关开始可变参数模板的内容,但它们都让我对如何设置这样的东西一无所知。谁能指出我正确的方向?

我在类似的问题上发现了以下内容:

受访者指出,可变参数模板将是使其足够通用的必要条件。这是一个开始,但我对此事的任何帮助感到迷茫和感激。

0 投票
1 回答
1954 浏览

c++ - 将变量数组转换为 std::tuple

我正在为用 C 实现的变体类型开发 C++11 包装器。变体类型支持常见的数据类型,如 int、float、string 以及tuples。我有表格基本类型的转换器......

...但我正在努力转换为 std::tuple。

底层 C API 可以通过返回一个 Variants 数组来分解一个元组。它看起来像这样:

现在我认识到我可以为每个大小的元组手动创建模板,但我正在寻找一个可以处理任何大小的元组的可变参数解决方案。关于如何解决这个问题的任何提示?

顺便说一句,我要包装的实际是 Erlang NIF API。

0 投票
1 回答
643 浏览

objective-c - 如何在 Objective-C 中覆盖可变参数方法

我正在尝试扩展一个具有可变参数方法的类,例如:

并在子类中通过调用原始方法来覆盖它,例如:

但这不起作用。有人知道如何工作吗?谢谢。

0 投票
1 回答
1092 浏览

haskell - 可变参数撰写功能?

我正在尝试编写一个可变参数函数组合函数。这基本上是(.)除了第二个参数函数是可变的。这应该允许如下表达式:

要不就

目前,如果我添加IncoherentInstances并需要第一个参数函数的非多态实例,我已经达到的效果。

有任何想法吗?甚至可能吗?

0 投票
1 回答
261 浏览

c++ - 如何创建一个模板化函数,该函数采用可变数量的参数,将参数传递给对象的正确构造函数?

我有以下模板化功能...

... 分配和设置 C++ 对象以在 Lua 脚本语言中使用。我想扩展这个函数,这样我就可以为对象的构造函数传递参数。它可能看起来像这样:

...并像这样工作:

避免像这样结束的可变参数模板:

会好的。

这在 c++11 中可行吗?

更新:我目前正在使用 -pedantic 打开的 gcc 4.6。非编译器特定的解决方案将是首选。

0 投票
6 回答
5304 浏览

php - 使用(未知)可变数量的参数调用函数?

我需要将参数发送到函数

但有时我需要发送 2 个数组,有时 - 3 个或更多:

0 投票
1 回答
1341 浏览

c++ - 可变参数扩展可以用作逗号运算符调用链吗?

我在看“如何正确使用可变参数模板的引用”,想知道逗号扩展能走多远。

这是答案的变体:

由于可变参数被扩展为其元素的逗号分隔列表,这些逗号在语义上是否等同于模板/函数参数分隔符,或者它们是否按词法插入,使其适合任何(后预处理器)使用,包括逗号运算符?

这适用于我的 GCC-4.6:

但是当我尝试时:

我不断收到解析错误,期待“;” 在“...”之前,并且“args”不会扩展其包。为什么它不起作用?是因为如果“args”为空,我们会得到一个无效的标点符号?合法吗,我的编译器不够好?

(我已经尝试在括号中包含“args”,和/或使用后增量;都没有成功。)

0 投票
2 回答
513 浏览

c++ - 可变参数函数 va_arg() 返回不正确的参数

问题部分解决:请阅读底部

有问题的可变参数函数,最简单的是:

如您所见,有问题的函数是我的 Variant 类的重载构造函数。这个特定的构造函数在声明数组时会考虑维度的大小和数量。

所以这条线在我的 main() 中运行:

当我断点之后

在函数行中,我得到以下结果:

然后程序段错误,因为显然这些是完全无效的值。

有任何想法吗?提前致谢。

问题部分解决:重新启动以某种方式解决了该问题,但现在是一个新问题......

之后调用的我的 OTHER 可变参数函数似乎拾取了传递给 Variant() 构造函数的任何参数,而不是它自己的参数。有任何想法吗?

和...

提前致谢。