Estoy haciendo una clase C++ 11 que produce una gran cantidad de datos. Actualmente, los datos provienen de una base de datos y no caben por completo en la memoria. Me gustaría proporcionarle al usuario un iterador que se comporte como iteradores STL regulares, pero sería perezoso. Más precisamente, me gustaría ser capaz de hacer algo así:¿Cómo podría hacer mi propio iterador perezoso?
for (auto& item : big_bunch_of_data) {
do_stuff_with(item);
}
Con elemento que se recuperan de la base de datos única en cada iteración. Si estoy en lo cierto, esta nueva sintaxis es azúcar para
for (stuff::iterator it = big_bunch_of_data.begin();it != big_bunch_of_data.end();it++) {
do_stuff_with(*it);
}
¿Quiere decir que al proporcionar begin
, end
y operator++
, que podría tener el comportamiento deseado? Y, ¿qué se supone que deben hacer estos métodos? Quiero decir, ¿puedo hacerlos perezosos sin romper cosas?
_ "Actualmente, los datos provienen de una base de datos y no caben completamente en la memoria" _ por lo que sin conocer su base de datos es difícil dar mejores consejos ... pero recuerde que muchas bases de datos SQL proporcionan sus propios mecanismos iteradores internos en la forma de _cursors_ que puede ser de utilidad para usted aquí. – Rook
Estoy usando sqlite, pero eso podría cambiar en el futuro, y no quiero exponer punteros crudos a los usuarios de mi código, es por eso que estoy tratando de encapsular su bastante bueno (y sí, ya vago) API. – Fabien