用C++ 0x实现生成器

Hoo*_*ked 8 c++ generator c++11

python关键字yield对我来说是一个很好的概念抽象,允许我将算法的重要部分提炼为人类可读的形式.我们之前已经讨论过:

各种语言的Python生成器

在C++中给出了一个仅限Windows的库的答案.另外我在这个问题中找到了另一个使用时髦宏扩展的例子:

C++中的生成器 - 无效使用非静态数据成员

我的计算机科学知识的边缘告诉我,yield函数与co-routines和monad有关,但我不太清楚它是如何适应C++或C++ 0x可以完成的.

似乎在C++中,没有使用宏扩展或仅使用Windows光纤(线程),yeild无法实现.这是真的?问题是否随C++ 0x的其他语言功能而改变?

Max*_*kin 4

您可以将yieldpython 机制映射到 C++ 迭代器。

请参阅Boost 函数输入迭代器和示例:

函数输入迭代器允许创建封装空函数对象和跟踪迭代器递增次数的状态对象的迭代器。函数输入迭代器对输入迭代器概念进行建模,对于创建有界输入迭代器非常有用。

与生成器迭代器一样,函数输入迭代器采用一个对生成器概念进行建模的函数(基本上是一个零或 0 元函数对象)。函数输入迭代器的每次增量都会调用生成器函数并将值存储在迭代器中。当迭代器被取消引用时,返回存储的值。

  • 这与 Python 的“yield”不太一样。 (3认同)