问题标签 [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++ - 使用折叠表达式打印每个元素之间的空格
我正在使用折叠表达式来打印可变参数包中的元素,但是如何在每个元素之间获得一个空格?
当前输出为“1 234”,所需输出为“1 2 3 4”
c++ - c++17折表达式语法
我在第 18 行和第 23 行遇到了折叠表达式的代码工作问题
我想让它有这样的结果
好像列表是空的,你会打印"Empty List"
,如果不是,如果类型是char
它不会打印空间,如果类型不是char
,它会打印中间的空间。
我尝试使用((std::cout<<" " << list), ...);
,但它会打印我不想要的额外空间,因此我将其存储在临时字符串中,然后将其删除。
任何人都可以帮忙吗?
c++ - c++17折叠表达式点积简单
我想用折叠表达式替换旧的元递归函数,下面的元函数是点积
如何替换以下代码以折叠表达式?
使用类似这样的伪代码
更清洁的版本
c++ - c++17折叠表达式打印功能,可支持20000个元素高效
您好,如何使用 20,000 元素等大元素使其打印效率更高?我花了很长时间编译,我尝试 在可变参数模板 C++ 中遵循这个静态 const 值数组
但我不能让它与折叠表达式一起工作,任何想法如何解决这个问题
c++ - 断言中的折叠表达式在某些机器上编译,但在其他机器上不编译
我有以下代码(出于演示目的)应该断言所有参数都使用 C++17 折叠表达式计算为真。
在 Coliru 上,它按预期工作;它不在我的机器上。我得到错误
使用 gcc 版本 8.2.1 20180831。在 Ubuntu 上使用 gcc 版本 5.4.0 20160609 我得到
这是一个表格,其中列出了相应编译器版本的工作和不工作的地方。
由于它任意工作/失败,我觉得这是标准库的问题,并且默认情况下clang使用libstdc ++,我相信,这可以解释为什么它在系统上对两者都有效或无效。
这段代码应该编译吗?如果是,我该如何让它工作?如果不是,是否是编译器错误?
PS:在 Coliru 上我已经能够使用相当复杂的折叠表达式,但我没有在其他机器上尝试过其他的。
c++ - 是否可以在折叠表达式中插入额外的操作?
在 C++17 中,折叠表达式可用,因此要打印参数,我们可以使用
有输出
1test5.6
如果我想使用折叠表达式'\n'
为每个元素附加一个额外的字符来获得以下结果怎么办?
这甚至可能吗?如果是,如何?
com - 通过使用具有有限可变参数的模板函数来限制允许的 COM 接口 (std::is_same)
我有包含指向不同接口的 COM 指针(或智能指针)的包装类。
意图: 一些 COM 类可以从各种其他 COM 接口获得,我想制作一个具有可变参数类型的模板构造函数,这将只允许传递适当类型的参数。
就像是:
辅助功能:
因此,我将定义我的包装类
到目前为止,我已经找到了这个线程: How to make a variadic is_same? 但它只是关于结构,而不是函数。我的目标是限制传递不适当的接口指针的可能性,因此不在运行时处理错误的接口错误。
更新: 由于组合比继承更可取,因此我进行了一些重新思考并决定使用模板函数而不是模板类。到目前为止,我已经设法结合给定的答案并想出了这个:
现在我可以定义我的 COM 包装类的构造函数:
到目前为止,它的行为符合预期(WFilterComInterfPtr),我不希望它在包装类构造函数中失败。
c++ - How to use if constexpr in template fold expressions?
I would like to write a sum function with variable number of argument with the condition that it should ignore argument that are not std::is_arithmetic
I have figured out a recursive version that works
I am wondering if I can use the if constexpr
in the context of fold expression to make the following code only considers arithmetic types from the argument pack:
c++ - 如何检测可变参数函数参数列表中给定类型参数的可用性并在处理所有参数后采取行动
operator<<()
我的C++17 折叠类有 以下重载:
如上所述,我需要什么吗?任何设置一些方向的部分回应将不胜感激......
尽管我提出了这个问题,就好像我在要求一个自动流标志恢复器一样,但请注意,我追求的是通用解决方案,而不是特别恢复std::cout
或 o/istream 对象恢复。在实践中,我的类是一种接受自定义类型作为运算符参数的数学对象,其中一些需要 ostream 的类似操纵器的函数,但要求用户在开始下一次此类使用之前提供一些最终操作数通常非常不方便。
我想到的一个想法是,TSeek
只要在args...
列表中提供了一种新的智能类型的不同类型的临时对象,那么在将最后一个参数转发给它之后,它将自动销毁,这真的是我想做我的最后任务!
我应该这样进行还是...?
c++ - 枚举折叠表达式
我有一些辅助代码使用编译时索引执行矢量重新洗牌。最重要的是生成的代码尽可能高效。我依赖于带有折叠表达式的参数包,我想知道编写此类代码的最佳实践是什么。
一个实际的例子:假设有一个函数insert
将容器的元素插入y
到容器x
中的位置Ii
,这些位置是编译时常量。这个函数的基本签名是这样的:
它的调用是这样的:insert<0, 2>(x, y)
. 我看到了实现这一点的两种明显的可能性。
第一:使用辅助索引变量迭代y
:
我对这个解决方案的问题是变量i
:我必须依靠编译器来优化它。
第二种解决方案避免了任何运行时依赖,但它需要一个辅助函数,使得整个实现相当难看:
有没有办法避免运行时变量和辅助函数?