问题标签 [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.
python - 迭代类型的参数包
我试图在绑定模板时简化 pybind11 的使用。现在我有一个类型的参数包,我需要使用cl.def()
该参数包中的每种类型调用一个函数(查看下面的代码)。还有一个名称向量,每个名称对应于参数的包类型。这是一个例子:
在 for 循环中,我认为我需要遍历类型。因为我现在只用两种类型调用这个函数(int
和float
)循环可能会被展开为类似的东西(这段代码旨在描述我想要实现的目标):
有没有办法解决我的任务(即从参数包中传递元素以及对应于每个变量的其他变量)?
c++ - 使用可变参数模板初始化向量
基本上我需要模板函数,它将容器的大小与一些常数进行比较。所以我需要制作容器的 std::vector 并检查谓词compSize是否为真。
但是编译器说,该参数包没有在
cvector{ 续... };
我也想使用compSizeMult作为 std::sort 的比较器并制作类似的东西
这就是为什么函数应该接受多个参数的原因。我不能在这个任务中使用循环和 lambda,只能使用标准算法
c++ - 创建C风格的数组形式参数包
如何从参数包创建数组?
c++ - 如何改进一些可变参数包模板实现
我设法创建了一个库来帮助我向 SqlLite 库发出请求,特别是那些与 BLOB 文件相关的库。
问题来了,因为我觉得实现可以改进,但是我没有足够的知识来实现它。对这两个问题的任何帮助:
可以使用 SQL 语句作为 c-pure 字符串或 std::string 调用某些函数。他们俩最终都调用了相同的函数最终实现。如果我尝试删除函数声明和调用的“_”(请参阅源代码),则问题来自对模板函数的明确调用。我知道这是一个小问题,但我想知道是否有任何方法可以实现它。
我尝试对使用文件在数据库中加载 BLOB 的请求以及不使用 BLOBS 的请求使用相同的代码。区别在于第一个使用文件流作为参数,第二个没有任何流参数。SqlLite 强制调用特定函数来执行 sql 语句,因此我需要使用“if consexpr ...”条件子句将 0 个参数的情况与 1 个或多个流参数的情况分开。
源代码在前面介绍:
请注意,我已经清理并模拟了所有 SqlLite 函数。这不是关于 SqlLite 的问题,而是关于改进模板样式的问题。
此外,这是一个指向http://coliru.stacked-crooked.com/a/ec8e8bf65f451b20
所述源代码的 coliru 链接。
c++ - 使用参数包生成对象
我正在寻找一个可以根据命令实例化类的对象。我之所以要这样做,是因为我必须创建一个对象的实例,它们都具有从文件中读取的相同初始参数,但我只想加载这些参数一次。我的解决方案是使用 lambdas,但感觉很脏:
有没有更好的方法,以Args... data
某种方式存储,然后稍后使用存储的参数包?
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 来调用?
c++ - 将成对的参数包解压缩为数组和元组
所以我有一个对列表,其中第一个成员是一个常量整数,第二个是一个类型,是否有将它解压缩到第一个成员的数组和第二个成员的元组中?
如何制作模板元函数,使其具有以下两个成员:
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 构造。
c++ - constexpr 对参数包的影响
为什么没有以下代码无效constexpr
:
而如果仅int
在论点中存在,则它是有效的。
编译器说:返回类型中的“auto”在此处推导为“int”,但在前面的 return 语句中推导为“double”
但如何constexpr
解决?
c++ - 使用折叠表达式展开带索引的参数包
我有一个带有参数包的模板函数。我想将其扩展为对第二个函数的调用,同时还提供 pack 中项目的索引。我可能可以弄清楚如何用递归来做,但我想尝试用折叠表达式来做。
这是我希望参数包扩展成的功能
这是接受参数包的函数
这可能吗?我意识到这并不重要,但我也在尝试更好地使用折叠表达式。