Visual Studio 2015中具有子例程的协程

时间:2016-09-06 16:07:55

标签: c++ visual-studio-2015 async-await yield coroutine

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;
  }
}

0 个答案:

没有答案