Эквивалентный шаблон генератора C++ на Python

У меня есть пример кода Python, который мне нужно имитировать на C++. Я не требую какого-то конкретного решения (например, решения на основе ко-программ, хотя они тоже были бы приемлемыми ответами), мне просто нужно воспроизвести семантику каким-то образом.

Python

Это базовый генератор последовательности, явно слишком большой для хранения материализованной версии.

def pair_sequence():
    for i in range(2**32):
        for j in range(2**32):
            yield (i, j)

Цель состоит в том, чтобы поддерживать два экземпляра приведенной выше последовательности и выполнять итерации над ними в полузакрытом режиме, но по частям. В примере ниже first_pass использует последовательность пар для инициализации буфера, а second_pass регенерирует ту же самую последовательность и снова обрабатывает буфер.

def run():
    seq1 = pair_sequence()
    seq2 = pair_sequence()

    buffer = [0] * 1000
    first_pass(seq1, buffer)
    second_pass(seq2, buffer)
    ... repeat ...

C++

Единственное, что я могу найти для решения в C++, это имитировать yield с помощью C++ coroutines, но я не нашел ни одной хорошей ссылки на то, как это сделать. Меня также интересуют альтернативные (не общие) решения этой проблемы. У меня нет достаточного бюджета памяти, чтобы хранить копию последовательности между проходами.

101
задан Noah Watkins 30 January 2012 в 03:58
поделиться