c++ goto实现generator
【摘要】 generator的主要的效果就是产生一个输出后,停在原地,直到再次被调用。python自身就带有generator,是一个重要特性,带来了很多便捷。但是c++本身不直接支持generator。如果一定要用的话,利用goto在循环中停止,是可行的。虽然goto普遍被大家诟病,但由于c++基本语法与基础库的局限性,在产生器这种场景,也许goto还不错。#include <iostream>cl...
generator的主要的效果就是产生一个输出后,停在原地,直到再次被调用。
python自身就带有generator,是一个重要特性,带来了很多便捷。但是c++本身不直接支持generator。
如果一定要用的话,利用goto在循环中停止,是可行的。
虽然goto普遍被大家诟病,但由于c++基本语法与基础库的局限性,在产生器这种场景,也许goto还不错。
#include <iostream>
class Generator {
public:
const std::string &Yield()
{
if (isFuncYieldCalled) {
goto POS_CONTINUE;
}
isFuncYieldCalled = true;
for (i = 0; i < 2; ++i) {
for (j = 0; j < 3; ++j) {
value = "i=" + std::to_string(i) + ",j=" + std::to_string(j);
return value;
POS_CONTINUE:
continue;
}
}
value = "";
return value;
}
int i = 0;
int j = 0;
bool isFuncYieldCalled = false;
std::string value;
};
int main()
{
std::cout << "Hello, World!" << std::endl;
Generator generator;
for (auto value = generator.Yield(); !value.empty(); value = generator.Yield()) {
std::cout << value << std::endl;
}
return 0;
}
输出为:
Hello, World!
i=0,j=0
i=0,j=1
i=0,j=2
i=1,j=0
i=1,j=1
i=1,j=2
Process finished with exit code 0
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)