You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现可与Ranges Views配合的C++20自定义Generator

让自定义C++20 Generator支持std::ranges::views管道操作

我正在使用C++20实现一个自定义Generator,复用了cppreference上的Generator实现。该实现可以正常用于普通范围循环:

// 此循环可正常运行:
for (const char i : range(65, 91))
    std::cout << i << ' ';

但无法与std::ranges::views配合使用,如下代码会触发编译错误:"no match for ‘operator|’ (operand types are ‘Generator’ and ‘std::ranges::views::__adaptor::_Partial’)"

// 此循环产生编译错误
for (const char i : range(65, 91) | std::views::take(3))
    std::cout << i << ' ';

我理解需要为Generator<T>定义适配所有ranges::views的模板operator|方法,寻求该方法的参考实现,或更通用的解决方案:如何让生成器的输出可通过管道传递给任意视图(如range(65, 91) | std::views::take(3))?

补充说明

上述cppreference中的Generator实现有如下使用示例:

template<std::integral T>
Generator<T> range(T first, const T last)
{
    while (first < last)
        co_yield first++;
}

我的实际代码中使用的是另一个生成非整数值的算法,目标是改进Generator使其支持视图管道操作。

内容的提问来源于stack exchange,提问作者Dmitry Kuzminov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:07:12