问题标签 [istream-view]

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 回答
211 浏览

c++ - 如何将 istream_view 收集到容器中?

我试图为我的的扩展实现一个通用的归约操作,ranges该操作会将 any 的元素收集range到给定的容器中。为了实现这一点,我首先创建了一个用于提取template template参数的虚拟类型,并提供了operator|用于将 arange与它结合起来:

测试如下:

代码完成执行没有问题。

但是,当与以下代码一起使用时,代码无法编译std::ranges::istream_view

无法通过一堵错误墙进行编译,在我看来,其中最重要的一个是:

这对我来说很有意义。容器要求用于通过构造函数构造它们的迭代器具有相同的类型

但这很好 - 这std::ranges::views::common_view就是创建的目的。所以我尝试修改operator|为:

再次,它未能以较小的错误墙编译,其中我认为这是最相关的:

我不太明白这个错误表示什么,但我想这意味着它istream_view不能被复制构造。对我来说有点道理。


但我真的希望我能拥有这个通用的to“函子”。当我们推断我们正在处理输入范围1istream_view时,我认为可以使用基于范围的for循环并将元素添加到所选容器中。

所以我尝试了这个:

然后告诉我,除其他外:

这不是唯一的问题。通常将元素添加到任何容器中也存在问题。range据我所知,采用 a 的构造函数是向容器添加元素的唯一通用方法和方法。

我觉得必须有一种正确且更简单的方法来做我想做的事情。to如果也适用于非模板,则奖励积分,即,我不仅可以这样做to<std::vector>,而且to<std::string>. 在第一种情况下,它将推断元素并创建所需的实例化std::vector,但在第二种情况下,它将获取所有元素并std::string用这些元素初始化 an。我怎样才能使这项工作?


1这假设实际问题在于我们正在使用输入范围这一事实。我不确定是不是这样。如果有人能指出我推理中可能存在的错误,我会很高兴。

0 投票
1 回答
314 浏览

c++ - 什么是 istream_view 以及何时使用?

显然,C++20 有一个新的std::istream-related 结构:std::istream_view. 它上面的cppreference 页面现在是一个存根†</sup>。那么,什么是“视图istream”,我可以用它做什么?


† - 好的,从技术上讲,它重定向到一个页面 aboutstd::basic_istream_view并且那个页面是一个存根。

0 投票
0 回答
33 浏览

c++ - 使用 range::views::common 和 range::istream_view

Visual Studio 2022 (v143)这段代码用and编译得很好/std:c++latest

但添加views::common

让编译器抱怨:

使用 range::views::iota 很好:

这是为什么?请包括参考资料以获得可能的解释。