问题标签 [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 回答
58 浏览

c++ - 如何将带有两个参数包的 requires 子句提取到一个概念中?

我有这个(据说不是那么有用)类模板和模板化构造函数,它是完美转发的候选者。但是,我想确保传递给构造函数的类型与为整个类指定的类型完全相同(没有 cvref 限定符):

现在我可以做:

我不能:

这很好。


但我想将requires ...身体提取到concept

但这给了我这个错误:

concept same_unqualified_types我想我可能在尝试拥有两个参数包的地方做错了。我试图手动测试它,但它似乎不起作用,即使我这样做same_unqualified_types<int, int>or ,两个s的参数包same_unqualified_types<int, int, Pack...>在哪里。Pack...int

我的逻辑哪里有问题?我可以将该requires子句提取到 aconcept吗?

免责声明:我知道我可以通过 CTAD 和演绎指南实现类似的目标 - 甚至不需要任何概念。我只想知道我的理解哪里有缺陷。

0 投票
1 回答
39 浏览

c++ - 默认模板参数和参数包

在经典的递归模板特化中,我需要在类定义中多次使用一种类型,例如用于继承和使用语句,也可能在其他地方。

例子:

如您所见,我需要多次编写std::conditional_t< sizeof...(REST), C<REST...>, Empty >表达式。

问题是,我不能使用

失败,因为 C++ 不允许在特化中使用默认模板参数

也不

失败,因为我不能在参数包后面使用默认模板参数。即使允许这样做,C 类还没有定义,因为这C<REST...>也会失败。

有什么技巧可以避免多次定义std::conditional_t< sizeof...(REST), C<REST...>, Empty >语句吗?

0 投票
2 回答
73 浏览

c++ - 非类型模板参数包扩展

我只是打印出一个非类型模板参数包。但是如果我想在元素之间有空格,我找不到有效的扩展。

例子:

是否有机会在不使用辅助函数的情况下扩展参数包以打印中间有空格的元素?

0 投票
1 回答
51 浏览

c++ - 没有使用参数包的标准构造函数的对象数组

我想用没有标准构造函数的对象填充大小为N的 std::array。

std::array<kissfft<float>, 64>具体来说,就我而言)

这会导致错误

错误:使用已删除的函数...标准构造函数

设置

您可以使用初始化器列表填充数组:

初始化列表需要N个对象。

您可以使用参数包构建数组:

问题

有没有办法反过来使用它并从单个参数构建参数包:

这将构建一个包含N 个 non_std_con的数组,其中每个对象都使用 {init1,init2} 进行初始化

感谢您的时间

0 投票
1 回答
39 浏览

c++ - 为什么将参数包传递给具有一个模板参数的函数会多次调用它?

拿这个代码:

上面的代码输出:

这怎么可能?我以为我已经理解了模板参数包,但是该行如何std::vector<int> vec{foo<Ts>()...};导致foo被多次调用?是否foo返回参数包,因为我们...在函数调用上使用了运算符?

这段代码是怎么回事?

0 投票
3 回答
65 浏览

c++ - 可以在单个表达式中扩展多个参数包吗?

我想从两个参数包中获取一个矩阵,如下所示:

结果应该是

10 20 30 40 20 40 60 80

我怎样才能做到这一点?

0 投票
1 回答
50 浏览

c++ - 如何组合多个可变参数模板或拆分参数包?

我目前正在尝试为 std::functions 定义一个通用乘法运算符。我想使用多个可变参数模板来做到这一点。部分专业化如下所示:

但我需要的是任何通用 std::functions 采用 u64 值和任意数量的其他参数的相同行为,应该如下所示:

我也想删除添加的类模板,但可能无法使用多个可变参数模板,因为编译器不知道可变参数模板何时结束,对吧?我想一个好的解决方法是拆分参数包,这样:

其中 split_args 返回输入索引之间的参数,但我不确定如何实现它,有什么想法吗?我找到了这样的解决方案: http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0535r0.html 但我不确定是否有可用的开源代码

编辑: 总之,我需要一个看起来像这样的函数:

EDIT2:用法:假设我有两个功能:

那么乘法运算符 h = f*g 应该将 h 返回为:

0 投票
3 回答
107 浏览

c++ - C++中可变参数模板对的打印方法

我想实现类似:

whereobj可以是任何类型,只要它具有<<重载 - 想法是稍后写入ofstream。我试过(一initializer_list对):

std::any不能不<<知道基础类型。可以使用可变参数模板和参数包扩展来实现吗?我也尝试过类似的东西:

但这显然是错误的。有什么建议么?

0 投票
3 回答
58 浏览

c++ - 从模板参数包c ++中解包第一个参数

我是模板的新手,特别是参数包,我想知道是否可以从包中获取第一个值。

例如下面的代码:

我如何真正获得第一个值args...

值得注意的是args..。可以包含不同的类型(字符串、布尔值等)

0 投票
3 回答
69 浏览

c++ - 如何从 C++ 模板中的参数包构造对象?

鉴于以下情况,如何从参数包中正确构造未知类型的对象?

我希望模板函数只能用匹配的类型调用,所以参数包中的所有内容都应该是相同的类型。例如,如果我需要使用,我引用哪个单独的项目都没有关系decltype(注释掉部分中的相关代码会导致编译错误)。