我应该如何使用 istreams 作为范围?

问题描述 投票:0回答:1

我喜欢 C++ 在 C++20 中获得的新范围功能(以及 C++23 中的更多功能)。假设我想将其中一些与

std::cin
一起使用,或者使用我打开的一些
std::fstream
。我该怎么做?

为了使问题更加具体,请考虑以下代码片段(改编自 cppreference.com):

constexpr std::string_view text{"Hello-+-C++-+-23-+-!"};
constexpr std::string_view delim{"-+-"};
std::ranges::for_each(text | std::views::lazy_split(delim), act_on_substring);

如果我想对

text
采取行动而不是
std::cin
,我该怎么写?我需要创建一些
std::istream_iterator
,还是可以用更简单的方法来实现?

c++ istream std-ranges c++23 istream-iterator
1个回答
0
投票

虽然

views::lazy_split
支持输入范围,但在这种情况下,它的模式必须是
tiny-range
,这意味着模式的大小必须小于或等于1。

所以你最多能做的是:

std::ranges::for_each(
  std::views::istream<char>(std::cin) | std::views::lazy_split('+'),
  act_on_substring
});
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.