此MCVE在Visual Studio中运行良好。
#include <experimental/generator>
#include <iostream>
std::experimental::generator<int> f() { for (int i = 0; i < 10; ++i) co_yield i; }
int main ()
{
for (int i : f())
std::cout << i << ' ';
return 0;
}
但是在g10中,它被列为具有完全支持或C20的协程,它没有。
(去掉experimental
没有用。)
我是这样编的:g++ -g -std=c++2a -fcoroutines -c main.cpp
.
它抱怨没有包含文件生成器,如果我取出#include
,该生成器就不是std::的一部分。或者没有定义。我想在新的标准中应该有它的另一个名字吧?或者如果没有,我该怎么做才能得到一个使用co_yield
的协程呢?
2条答案
按热度按时间cwtwac6a1#
在GCC's status list中,除了它的协程支持之外,没有任何东西表明它支持p0912r5之外的任何东西,p0912r5不提供
std::generator
,无论是实验性的还是其他的。我记得VS added
<experimental/generator>
a few years ago;我想愚者从来没有这样做过。如果它目前被提议包含在C++中,并且你可以找到相关的提议,也许你可以跟踪它的支持状态。但是老实说,现在,你最好自己写一个工作的,直到它成为某个实际标准的一部分。
*tl;dr:虽然它 * 是 * 一个协程,但这个特性不是 * 协程TS的 * 一部分 。
nkhmeac62#
如果你需要一个g++11及以上的发电机,复制粘贴一个在这里:
https://en.cppreference.com/w/cpp/coroutine/coroutine_handle