.net – 可以C/C++LI收益吗?

在C#中,我可以使用yield关键字实现一个生成器,即:

int GenInt()
{
    for(int i = 0; i < 5; i++)
        yield return i;
}

然后,多次调用该函数将返回0到4.

可以在C/C++LI中完成同样的事情吗?没有收益关键字,所以我的直觉反应是没有,哪些有吸引力,但你能做什么?

最佳答案

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?

C#中的收益返回只是一个快捷方式,让编译器为实现IEnumerable< T>的实现为您生成必要的代码.和IEnumerator< T&gt ;.由于C/C++LI不提供此服务,您必须手动执行此操作:只需编写两个类,即实现每个接口的类(或者像C#编译器一样实现两个类,但是如果这两个类可以弄乱,整个事情可以重复地被称为 - 提示:状态). 这是一个小例子 – 由于我没有IDE,我的C/C++LI有点生锈,我会在C#中给它:

class MyRange : IEnumerable<int> {
    private class MyRangeIterator : IEnumerator<int> {
        private int i = 0;

        public int Current { get { return i; } }

        object IEnumerator.Current { get { return Current; } }

        public bool MoveNext() { return i++ != 10; }

        public void Dispose() { }

        void IEnumerator.Reset() { throw new NotImplementedException(); }
    }

    public IEnumerator<int> GetEnumerator() { return new MyRangeIterator(); }

    IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
}

// Usage:
foreach (int i in new MyRange())
    Console.WriteLine(i);

转载注明原文:.net – 可以C/C++LI收益吗? - 代码日志