Может C++ / урожай CLI?

Решарпер раздражал насчет этого. Мне пришлось установить BuildSolution на f6, а затем удалить F6 из Resharper_Move

12
задан Lee Crabtree 5 June 2009 в 14:37
поделиться

1 ответ

Можно ли сделать то же самое в C ++ / CLI? Нет ключевого слова yield, поэтому моя интуиция такова, что его нет, что отстой, но что вы можете сделать?

yield return в C # - это просто ярлык, который позволяет компилятору генерировать для вас необходимый код, который реализует реализацию IEnumerable и IEnumerator . Поскольку C ++ / CLI не предлагает эту услугу, вам придется делать это вручную: просто напишите два класса, один из которых реализует каждый интерфейс (или, как компилятор C #, один класс, реализующий оба, но это может стать беспорядочным, если все это можно вызывать повторно - cue: statefulness).

Вот небольшой пример - поскольку у меня нет IDE, а мой C ++ / CLI немного устарел, я приведу его на 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);
18
ответ дан 2 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: