Utilizzando boost :: depth_first_search con Visitor
-
11-10-2019 - |
Domanda
Come suggerisce il titolo, sto usando boost::depth_first_search
e utilizzando un visitatore (che eredita da boost::default_dfs_visitor
) di attuare alcune algoritmo.
Tuttavia, durante la marcia dell'algoritmo, voglio salvare alcune informazioni nel visitatore, da interrogare in seguito. Tuttavia, le informazioni viene cancellata dopo che la DFS è fatto, quindi immagino che utilizza una copia. Altro che solo usando puntatori per tutti variabili private, c'è un modo per evitare questo e l'uso spinta fare la mia copia?
Soluzione
Ha davvero senso che l'informazione è parte del visitatore?
La mia ipotesi è che l'informazione appartiene logicamente con il grafico, e deve essere conservato lì, non nel visitatore.
È possibile memorizzare un riferimento al grafico nel visitatore. Poi, come il visitatore attraversa il grafico, è possibile aggiornare le informazioni che sono memorizzate con il grafico.
Il risultato è che è OK per distruggere il visitatore quando il suo lavoro è fatto, perché i risultati saranno persistere come parte del grafico.
Altri suggerimenti
Si potrebbe provare che passa il visitatore avvolto in un boost::reference_wrapper
.
Modifica - teh codez
YourVisitorClass your_visitor;
boost::depth_first_search(your_graph, boost::ref(your_visitor),
your_color_map);
boost::ref(your_visitor)
restituisce un boost::reference_wrapper<YourVisitorClass>
. Quando depth_first_search
crea una copia di tale argomentazioni, si copierà il reference_wrapper invece dell'oggetto visitatore. Copie del riferimento si riferiscono alla stessa istanza dell'originale.