Pregunta

Como sugiere el título, estoy usando boost::depth_first_search y el uso de un Visitante (heredando de boost::default_dfs_visitor) para implementar algún algoritmo.

Sin embargo, durante la ejecución del algoritmo, que quieren ahorrar algo de información en el visitante, a consultar más adelante. Sin embargo, la información se borra después de la DFS se hace, así que supongo que utiliza una copia. Otros más que el uso de punteros para todos los variables privadas, hay una manera de evitar esto y el uso impulso hacer que mi copia?

¿Fue útil?

Solución

¿Realmente tiene sentido de que la información es parte del visitante?

Mi conjetura es que la información pertenece lógicamente con el gráfico, y debe ser almacenado allí, no en el visitante.

Se puede almacenar una referencia a la gráfica en el visitante. Luego, a medida que el visitante atraviesa la gráfica, se puede actualizar la información que se almacena con el gráfico.

El resultado es que está bien para destruir el visitante cuando se realiza su trabajo, ya que los resultados persistirán como parte de la gráfica.

Otros consejos

Se podría tratar de pasar a su visitante envuelto en una boost::reference_wrapper .

Editar - teh codez

YourVisitorClass your_visitor;
boost::depth_first_search(your_graph, boost::ref(your_visitor), 
                          your_color_map);

boost::ref(your_visitor) devuelve un boost::reference_wrapper<YourVisitorClass>. Cuando depth_first_search crea una copia de esa argumentos, se copiará el reference_wrapper en lugar del objeto visitante. Las copias de la referencia se referirán a la misma instancia que el original.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top