问题标签 [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.
c++ - MSVC 模板化 lambda 函数参数包失败
我偶然发现了一个错误,我不确定是什么原因造成的。你可以在这里找到代码:https ://godbolt.org/z/F9zdHg
如果你设置USE_PACK 0
一切编译正常,否则我会得到一个关于扩展的奇怪错误Is...
。这是编译器错误,还是我做错了什么?
c++ - 评估参数包
这是在不使用折叠的情况下评估参数包的唯一方法(因为它需要使用运算符)?
本质上我想做(f(Is)...)
,但由于某种原因,这在 C++ 中是不允许的。有没有比使用上面介绍的解决方法更优雅的方法来实现?
c++ - 改善折叠功能
我在 C++ 中实现了一个简单的折叠函数,它接受一个 lambda,并且可以在编译时同时折叠多个向量。我想知道它是否可以以某种方式简化(我提供了递归版本和迭代递归版本 - 我不确定哪个应该有更好的性能):https ://godbolt.org/z/39pW81
也欢迎性能优化 - 在这方面,这两种方法中的任何一种更快吗?
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
有没有办法使这项工作?
c++ - 我可以 std::forward 折叠表达式中的参数吗?
在 C++11 中,我们有可变参数模板,在其中我们可以std::forward
像下面的代码一样使用参数
但是,在 C++17 中,我们有折叠表达式(据我了解,它直到最后一个参数才进行递归函数调用)。
在在线示例中,当使用折叠表达式时,我看不到std::forward
参数。
我可以在折叠表达式中转发参数吗?还是我们根本不需要它?
这可能是一个愚蠢的初学者问题,但我仍然无法在网上找到答案。
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>
不等同。我想知道为什么代码失败了我该如何修复它(以便编译器将它们视为等效)?
c++ - 如何进行参数包的分组或成对折叠?
我知道我可以只使用对列表或类似的东西,但我感兴趣的是如何做到这一点,同时保持函数的语法:
c++ - 我正在尝试创建一个在 C++ 中使用参数包构造函数的异常类
我正在创建名为的自定义异常类app_exception
,它派生自runtime_exception
. 我想在构造函数中放置多个参数,但我不知道为什么代码无法编译。我通常使用va_start
with ...
,但我正在尝试使用 Parameter Pack 来执行此操作。
我认为这是大体上的事情,但我不太确定。我想像这样使用它:
c++ - C++17 中的折叠表达式
我正在阅读“C++17 - The Complete Guide”一书,我在第 107 页和第 108 页遇到了关于 C++17 中折叠表达式的示例:
作者有什么理由不能这样做(没有将第一个参数与其余参数分开,也没有额外的打印空间!):
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