如何实现可与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
相关产品推荐
相关产品推荐

