Question

As the title suggests, I'm using boost::depth_first_search and using a Visitor (inheriting from boost::default_dfs_visitor) to implement some algorithm.

However, during the algorithm's run, I want to save some information in the visitor, to be queried later. However, the information is erased after the DFS is done, so I assume it uses a copy. Other than just using pointers for all private variables, is there a way to prevent this and make boost use my copy?

Was it helpful?

Solution

Does it really make sense that the information is part of the visitor?

My guess is that the information logically belongs with the graph, and should be stored there, not in the visitor.

You can store a reference to the graph in the visitor. Then, as the visitor traverses the graph, it can update the information that is stored with the graph.

The result is that it is OK to destroy the visitor when its work is done, because the results will persist as part of the graph.

OTHER TIPS

You could try passing your visitor wrapped in a boost::reference_wrapper.

Edit - teh codez

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

boost::ref(your_visitor) returns a boost::reference_wrapper<YourVisitorClass>. When depth_first_search creates a copy of that arguments, it will copy the reference_wrapper instead of the visitor object. Copies of the reference will refer to the same instance as the original.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top