我正在尝试学习 C++ 范围。据我所知,创建生成自定义序列的范围视图对象的最简单(也是唯一的,除了实现自定义范围视图类)方法是使用 C++23' std::generator<>
:
std::generator<char> letters_gen(char start)
{
for (;;) co_yield start++;
}
如何在涉及范围操作的多个表达式中使用std::generator
对象(通过调用创建letters_gen()
)?例如,如果我想将 10 个字母收集到一个向量中,然后将另外 15 个字母收集到另一个向量中:
int main()
{
auto letters = letters_gen('a');
auto x = letters | std::views::take(10) | std::ranges::to<std::vector>();
auto y = letters | std::views::take(15) | std::ranges::to<std::vector>();
}
这不能编译:
main.cc:150:26: error: no match for ‘operator|’ (operand types are ‘std::generator<char>’ and ‘std::ranges::views::__adaptor::_Partial<std::ranges::views::_Take, int>’)
如果有的话,什么是正确的方法可以达到预期的效果?