【发布时间】:2021-04-29 19:38:49
【问题描述】:
我正在玩 C++ 20 的协程。示例使用 clang++ 编译。
我面临的编译器错误是
错误:二进制表达式的操作数无效('std::ostream'(又名 'basic_ostream') 和 'cppcoro::generator')
大概是下面一行
std::cout << numbers << " ";
截取的完整代码如下所示:
#include <thread>
#include <iostream>
#include <vector>
#include <cppcoro/generator.hpp>
using namespace std;
// coroutine
cppcoro::generator<int> generatorForNumbers(int begin, int inc = 1)
{
// for Schleife ohne Abbruchbedingung
for (int i = begin;; i += inc)
{
co_yield i;
}
}
int main()
{
auto numbers = generatorForNumbers(-10);
for (int i= 1; i <= 20; ++i)
{
std::cout << numbers << " ";
}
std::cout << "\n\n";
// inline works
for (auto n: generatorForNumbers(0, 5))
{
std::cout << n << " ";
}
std::cout << std::endl;
}
可在此处找到截断的可执行代码: https://godbolt.org/z/4cxhqxPP7
【问题讨论】:
-
我第一次看到协同程序在起作用。我看了一下标题,我可以理解基于范围的循环是如何工作的,但是为什么
std::cout << numbers << " ";应该工作,我不明白。您是否有一些参考资料表明这应该没问题? -
这篇文章可能会像其他语言一样使用
cout << numbers()。这是错误的(专门针对这种生成器类型;另一个可以支持),但可能这就是意图。
标签: c++ iostream clang++ c++-coroutine