范围::视图::生成具有发电机函数信号范围的范围

发布于 2025-02-10 07:57:43 字数 92 浏览 2 评论 0原文

我想拥有一个像Python一样终止的生成器,但是如果支持此功能,我无法从范围:: views :: views :: generate的接口。

I'd like to have a generator that terminates, like python, but I can't tell from ranges::views::generate's interface if this is supported.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╰ゝ天使的微笑 2025-02-17 07:57:43

您可以轻松地手动滚动:
https://godbolt.org/z/xcgz666657r 尽管使用coroutine Generator可能会更好有一个可用。

您可以在发电机中返回可选的,并在使用nullopt使用视图生成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();})
    ;

You can roll it by hand easily enough:
https://godbolt.org/z/xcGz6657r although it's probably better to use a coroutine generator if you have one available.

You can return an optional in the generator, and stop taking elements when a std::nullopt is generated with views::take_while

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();})
    ;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文