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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top