¿Cómo hacer una copia de Boost :: FileSystem :: Directory_iterator?
-
28-10-2019 - |
Pregunta
Sé que esto suena estúpido, pero mira este simple ejemplo (trabajar en dirección debería tener más de un elemento):
#define BOOST_FILESYSTEM_VERSION 3
#include <boost/filesystem.hpp>
#include <cassert>
int main()
{
using namespace boost::filesystem;
directory_iterator it("./");
directory_iterator it_copy = it;
++it;
assert(it_copy != it);
return 0;
}
it_copy
se modifica junto con it
! (Boost 1.45) ¿Qué consideraciones podrían conducir a tal diseño (directory_iterator
¿Es algo así como Smart PTR)?
Solo necesito guardar una copia de directory_iterator
para usarlo más tarde.
Solución
Si echas un vistazo al referencia Notarás que se anuncia para ser un boost::single_pass_traversal_tag
.
Este es el equivalente (en terminología de impulso) de la Iterador de entrada En el STL (piense en ello como un iterador que entrega paquetes desde una conexión de red, no puede rebobinar).
Observe también (de esta misma página):
i == j
no implica que++i == ++j
.
En este punto, uno puede preguntarse por qué se puede copiar. La razón es que los algoritmos STL han establecido la norma tomando sus argumentos por copia. Por lo tanto, no sería utilizable con los algoritmos STL si no pudiera copiarse.