C++/CLI 可以屈服吗?
在C#中,我可以使用yield
关键字来实现生成器,即:
int GenInt()
{
for(int i = 0; i < 5; i++)
yield return i;
}
然后,多次调用该函数将返回0到4。
在C++/CLI中可以完成同样的事情吗? 没有 yield
关键字,所以我的直觉反应是没有,这很糟糕,但是你能做什么呢?
In C#, I can use the yield
keyword to implement a generator, viz:
int GenInt()
{
for(int i = 0; i < 5; i++)
yield return i;
}
Then, calling the function multiple times will return 0 through 4.
Can the same thing be done in C++/CLI? There's no yield
keyword, so my gut reaction is that there isn't, which sucks, but what can you do?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
C# 中的
yield return
只是一个快捷方式,可让编译器为您生成实现IEnumerable
和IEnumerator< 的实现的必要代码。 /代码>。 由于 C++/CLI 不提供此服务,因此您必须手动执行此操作:只需编写两个类,其中一个类实现每个接口(或者,像 C# 编译器一样,一个类同时实现这两个类,但这可能会变得混乱,如果整个事情可以重复调用——提示:有状态)。
这是一个小例子 - 因为我没有 IDE 并且我的 C++/CLI 有点生疏,所以我将用 C# 给出它:
yield return
in C# is just a shortcut that lets the compiler generate the necessary code for you that implements an implementation ofIEnumerable<T>
andIEnumerator<T>
. Since C++/CLI doesn't offer this service, you've got to do it manually: just write two classes, one that implements each interface (or, doing it like the C# compiler, one class implementing both but this can get messy if the whole thing can be called repeatedly – cue: statefulness).Here's a small example – since I don't have an IDE and my C++/CLI is a bit rusty, I'll give it in C#: