我想有一个终止生成器,像python一样,但我不能从ranges::views::generate
的接口判断是否支持。
你可以很容易地用手卷它:https://godbolt.org/z/xcGz6657r不过如果有协程生成器的话,使用协程生成器可能会更好。
您可以在生成器中返回一个可选项,并且当views::take_while
生成std::nullopt
时停止获取元素
auto out = ranges::views::generate(
[i = 0]() mutable -> std::optional<int>
{
if (i > 3)
return std::nullopt;
return { i++ };
})
| ranges::views::take_while([](auto opt){ return opt.has_value();})
;