Как мне сделать собственный ленивый итератор?

Я создаю класс С++ 11, который производит огромное количество данных. Эти данные в настоящее время поступают из базы данных и не могут полностью поместиться в памяти. Я хотел бы предоставить пользователю итератор, который ведет себя как обычный итератор STL, но это было бы лениво. Точнее, я бы смог сделать что-то подобное:

for (auto& item : big_bunch_of_data) {
    do_stuff_with(item);
}

Элемент извлекается из базы данных только на каждой итерации. Если я прав, этот новый синтаксис - сахар для

for (stuff::iterator it = big_bunch_of_data.begin();it != big_bunch_of_data.end();it++) {
    do_stuff_with(*it);
}

Означает ли это, что, предоставив begin, endи operator++, я мог добиться желаемого поведения? И что должны делать эти методы? Я имею в виду, могу ли я сделать их ленивыми, не ломая ничего?

10
задан R. Martinho Fernandes 27 June 2012 в 08:58
поделиться