3

正如标题所暗示的,我正在使用boost::depth_first_search和使用一个访问者(继承自boost::default_dfs_visitor)来实现一些算法。

但是,在算法运行期间,我想在访问者中保存一些信息,以便以后查询。但是,在 DFS 完成后,信息会被删除,所以我假设它使用副本。除了对所有私有变量使用指针之外,有没有办法防止这种情况并让 boost 使用我的副本?

4

2 回答 2

2

您可以尝试通过包裹在boost::reference_wrapper.

编辑-codez

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

boost::ref(your_visitor)返回一个boost::reference_wrapper<YourVisitorClass>。创建depth_first_search该参数的副本时,它将复制 reference_wrapper 而不是访问者对象。引用的副本将引用与原始实例相同的实例。

于 2011-01-16T17:35:29.393 回答
1

信息是访问者的一部分真的有意义吗?

我的猜测是信息在逻辑上属于图表,应该存储在那里,而不是访问者中。

您可以在访问者中存储对图表的引用。然后,当访问者遍历图表时,它可以更新与图表一起存储的信息。

结果是在访问者的工作完成后销毁访问者是可以的,因为结果将作为图形的一部分持续存在。

于 2011-01-16T21:55:49.407 回答