问题标签 [fold-expression]

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 投票
0 回答
72 浏览

c++ - MSVC 模板化 lambda 函数参数包失败

我偶然发现了一个错误,我不确定是什么原因造成的。你可以在这里找到代码:https ://godbolt.org/z/F9zdHg

如果你设置USE_PACK 0一切编译正常,否则我会得到一个关于扩展的奇怪错误Is...。这是编译器错误,还是我做错了什么?

0 投票
1 回答
72 浏览

c++ - 评估参数包

这是在不使用折叠的情况下评估参数包的唯一方法(因为它需要使用运算符)?

本质上我想做(f(Is)...),但由于某种原因,这在 C++ 中是不允许的。有没有比使用上面介绍的解决方法更优雅的方法来实现?

0 投票
2 回答
161 浏览

c++ - 改善折叠功能

我在 C++ 中实现了一个简单的折叠函数,它接受一个 lambda,并且可以在编译时同时折叠多个向量。我想知道它是否可以以某种方式简化(我提供了递归版本和迭代递归版本 - 我不确定哪个应该有更好的性能):https ://godbolt.org/z/39pW81

也欢迎性能优化 - 在这方面,这两种方法中的任何一种更快吗?

0 投票
0 回答
34 浏览

c++ - 带有可变参数模板的表达式模板运算符

使用可变参数模板,我们可以编写一个函数add,它接受任意数量的输入参数,然后返回一个Expression(延迟计算)。当调用特定索引时,此表达式一次性对所有输入向量的i所有元素求和。i

所有这些看起来都非常漂亮和整洁,但是是否可以重载实际的 operator,即编写以下内容:

不幸的是,第二个代码 usingv1 + v2 + v3导致编译错误:

  • 与 2019 年相比:Fatal Error C1001, An internal error has occurred in the compiler.
  • 海湾合作委员会 8.3.0:'Expression<Ts ...> operator+(const Ts& ...)' must have an argument of class or enumerated type

有没有办法使这项工作?

0 投票
1 回答
500 浏览

c++ - 我可以 std::forward 折叠表达式中的参数吗?

在 C++11 中,我们有可变参数模板,在其中我们可以std::forward像下面的代码一样使用参数

但是,在 C++17 中,我们有折叠表达式(据我了解,它直到最后一个参数才进行递归函数调用)。

在在线示例中,当使用折叠表达式时,我看不到std::forward参数。

我可以在折叠表达式中转发参数吗?还是我们根本不需要它?

这可能是一个愚蠢的初学者问题,但我仍然无法在网上找到答案。

0 投票
3 回答
398 浏览

c++ - 如何实现与参数顺序无关的 std::same_as 的广义形式(即对于两个以上的类型参数)?

背景

我们知道这个概念std::same_as与顺序无关(换句话说,对称):std::same_as<T, U>等同于std::same_as<U, T>相关问题)。在这个问题中,我想实现一些更通用的东西:template <typename ... Types> concept same_are = ...检查包中的类型是否Types彼此相等。

我的尝试

(我的目的是枚举包中每一个可能的有序类型对)

不幸的是,这段代码无法编译,编译器抱怨调用foo(int, int)不明确。我相信它认为are_same<U, T>are_same<T, U>不等同。我想知道为什么代码失败了我该如何修复它(以便编译器将它们视为等效)?

0 投票
5 回答
543 浏览

c++ - 如何进行参数包的分组或成对折叠?

我知道我可以只使用对列表或类似的东西,但我感兴趣的是如何做到这一点,同时保持函数的语法:

0 投票
1 回答
128 浏览

c++ - 我正在尝试创建一个在 C++ 中使用参数包构造函数的异常类

我正在创建名为的自定义异常类app_exception,它派生自runtime_exception. 我想在构造函数中放置多个参数,但我不知道为什么代码无法编译。我通常使用va_startwith ...,但我正在尝试使用 Parameter Pack 来执行此操作。

我认为这是大体上的事情,但我不太确定。我想像这样使用它:

0 投票
4 回答
249 浏览

c++ - C++17 中的折叠表达式

我正在阅读“C++17 - The Complete Guide”一书,我在第 107 页和第 108 页遇到了关于 C++17 中折叠表达式的示例:

作者有什么理由不能这样做(没有将第一个参数与其余参数分开,也没有额外的打印空间!):

0 投票
1 回答
191 浏览

c++ - c++宏扩展(__VA_ARGS__项名称和值)

有没有什么技巧可以实现下面伪代码的功能?谢谢。

很快,使用FAKE_MACRO(var1, var2, var3);我想获取扩展代码

std::make_pair("var1", var1), std::make_pair("var2", var2), std::make_pair("var3", var3)

var0 ... varn