Visual Studio 2015支持协同程序,因此我可以这样做,例如:
#include<iostream>
#include<experimental/generator>
auto gen(int increment) {
int i=1;
while(true) {
for(int j=0; j<i; j++) yield j;
i+=increment;
}
}
int main()
{
auto Coroutine1=gen(1);
auto Coroutine2=gen(2);
auto Iterator1=Coroutine1.begin();
auto Iterator2=Coroutine2.begin();
for(int k=0; k<10; k++) {
std::cout<<(*Iterator1)<<" "<<(*Iterator2)<<endl;
++Iterator1;
++Iterator2;
}
产生这个输出:
0 0
0 0
1 1
0 2
1 0
2 1
0 2
1 3
2 4
3 0
这是一个有点人为的例子,只是为了展示一个在没有协同程序的情况下无法轻易实现的案例。
现在,我的问题:如何将“yield”放入子程序?以下代码无法编译,但理想情况下,我想要这样的代码:
auto genSubroutine(int current){
for(int j=0; j<current; j++) yield j;
}
auto gen(int increment) {
int i=1;
while(true) {
genSubroutine(i);
i+=increment;
}
}