问题标签 [parameter-pack]

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 投票
1 回答
140 浏览

python - 迭代类型的参数包

我试图在绑定模板时简化 pybind11 的使用。现在我有一个类型的参数包,我需要使用cl.def()该参数包中的每种类型调用一个函数(查看下面的代码)。还有一个名称向量,每个名称对应于参数的包类型。这是一个例子:

在 for 循环中,我认为我需要遍历类型。因为我现在只用两种类型调用这个函数(intfloat)循环可能会被展开为类似的东西(这段代码旨在描述我想要实现的目标):

有没有办法解决我的任务(即从参数包中传递元素以及对应于每个变量的其他变量)?

0 投票
1 回答
65 浏览

c++ - 使用可变参数模板初始化向量

基本上我需要模板函数,它将容器的大小与一些常数进行比较。所以我需要制作容器的 std::vector 并检查谓词compSize是否为真。

但是编译器说,该参数包没有在

cvector{ 续... };

我也想使用compSizeMult作为 std::sort 的比较器并制作类似的东西

这就是为什么函数应该接受多个参数的原因。我不能在这个任务中使用循环和 lambda,只能使用标准算法

0 投票
1 回答
38 浏览

c++ - 创建C风格的数组形式参数包

如何从参数包创建数组?

0 投票
1 回答
71 浏览

c++ - 如何改进一些可变参数包模板实现

我设法创建了一个库来帮助我向 SqlLite 库发出请求,特别是那些与 BLOB 文件相关的库。

问题来了,因为我觉得实现可以改进,但是我没有足够的知识来实现​​它。对这两个问题的任何帮助:

  1. 可以使用 SQL 语句作为 c-pure 字符串或 std::string 调用某些函数。他们俩最终都调用了相同的函数最终实现。如果我尝试删除函数声明和调用的“_”(请参阅​​源代码),则问题来自对模板函数的明确调用。我知道这是一个小问题,但我想知道是否有任何方法可以实现它。

  2. 我尝试对使用文件在数据库中加载 BLOB 的请求以及不使用 BLOBS 的请求使用相同的代码。区别在于第一个使用文件流作为参数,第二个没有任何流参数。SqlLite 强制调用特定函数来执行 sql 语句,因此我需要使用“if consexpr ...”条件子句将 0 个参数的情况与 1 个或多个流参数的情况分开。

源代码在前面介绍:

请注意,我已经清理并模拟了所有 SqlLite 函数。这不是关于 SqlLite 的问题,而是关于改进模板样式的问题。

此外,这是一个指向http://coliru.stacked-crooked.com/a/ec8e8bf65f451b20所述源代码的 coliru 链接。

0 投票
1 回答
62 浏览

c++ - 使用参数包生成对象

我正在寻找一个可以根据命令实例化类的对象。我之所以要这样做,是因为我必须创建一个对象的实例,它们都具有从文件中读取的相同初始参数,但我只想加载这些参数一次。我的解决方案是使用 lambdas,但感觉很脏:

有没有更好的方法,以Args... data某种方式存储,然后稍后使用存储的参数包?

0 投票
2 回答
73 浏览

c++ - 仅使用必要的参数调用函数指针

假设我有这样X声明和定义的结构:

我想X::multiply通过函数指针调用。为此,我定义了一个proxy-function:

我这样使用它:

proxy<...>甚至proxy像魅力一样工作,除了我不能proxy只用一个参数调用,尽管第二个参数应该是可选的。(在 's 的调用中省略右值参数 2proxy会产生错误。)当然,proxy期望正好有两个参数,所以我还创建了另一个版本的proxy-function:

此版本的参数和参数类型分为单独的参数包。奇怪的是,调用proxy2<X, int, int, int, int>(&x, &X::multiply, a, 2);使编译器认为此调用的 ParameterTypes 是 (int, int, int) 而 ArgumentTypes 是 (int, int)。同样奇怪的是调用proxy2(&x, &X::multiply, a, 2);工作得很好。如果我遗漏了正确的值 2,这些都不起作用。

问题仍然存在:如何X::multiply只使用 a 参数而不指定 b 来调用?

0 投票
1 回答
58 浏览

c++ - 将成对的参数包解压缩为数组和元组

所以我有一个对列表,其中第一个成员是一个常量整数,第二个是一个类型,是否有将它解压缩到第一个成员的数组和第二个成员的元组中?

如何制作模板元函数,使其具有以下两个成员:

0 投票
2 回答
63 浏览

c++ - 针对“种类”层次结构使用可变参数验证 std::function

我有一个系统(C++14,使用 Visual Studio 2015 和 GCC 4.9.2),其中我们有许多不同类型的“事件”,这些“事件”可以导致回调发生,以及一个类层次结构,用于识别类型事件和特定于该类型事件的其他自定义属性。

有一个可以接收特定事件对象的事件管理器,以及一个在事件发生时调用的侦听器函数(订阅)。

某些事件会将某些参数传递给侦听器回调,但参数的类型取决于事件类型。

有没有一种方法可以验证传入的侦听器参数(可变参数)是否对事件对象有效?

我已经有工作代码可以存储侦听器函数以供以后回调(类似于上面),但是 Args... 参数包/可变参数的匹配仅在事件中触发事件时完成manager - 当然,如果原始侦听器的参数集不匹配,则不会调用它(并且会出现静默失败)。

能够在添加侦听器时根据事件类型验证这个参数列表(希望以某种方式使用类层次结构)会很棒。有人有想法吗?

注意:我目前仅限于 C++14/Visual Studio 2014/gcc 4.9.2,因此不能使用任何 C++17 构造。

0 投票
1 回答
55 浏览

c++ - constexpr 对参数包的影响

为什么没有以下代码无效constexpr

而如果仅int在论点中存在,则它是有效的。

编译器说:返回类型中的“auto”在此处推导为“int”,但在前面的 return 语句中推导为“double”

但如何constexpr解决?

0 投票
3 回答
196 浏览

c++ - 使用折叠表达式展开带索引的参数包

我有一个带有参数包的模板函数。我想将其扩展为对第二个函数的调用,同时还提供 pack 中项目的索引。我可能可以弄清楚如何用递归来做,但我想尝试用折叠表达式来做。

这是我希望参数包扩展成的功能

这是接受参数包的函数

这可能吗?我意识到这并不重要,但我也在尝试更好地使用折叠表达式。