如标题所暗示的,我正在使用 boost::depth_first_search 并使用访客(从 boost::default_dfs_visitor)实现一些算法。

但是,在算法运行期间,我想在访问者中保存一些信息,以后要查询。但是,在完成DFS之后将删除信息,因此我认为它使用了副本。除了将指针用于 全部 私人变量,有没有办法防止这种情况并使Boost使用我的副本?

有帮助吗?

解决方案

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

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

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

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

其他提示

您可以尝试通过包裹的访客 boost::reference_wrapper.

编辑 - TEH CODEZ

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top