正如标题所暗示的,我正在使用boost::depth_first_search
和使用一个访问者(继承自boost::default_dfs_visitor
)来实现一些算法。
但是,在算法运行期间,我想在访问者中保存一些信息,以便以后查询。但是,在 DFS 完成后,信息会被删除,所以我假设它使用副本。除了对所有私有变量使用指针之外,有没有办法防止这种情况并让 boost 使用我的副本?
正如标题所暗示的,我正在使用boost::depth_first_search
和使用一个访问者(继承自boost::default_dfs_visitor
)来实现一些算法。
但是,在算法运行期间,我想在访问者中保存一些信息,以便以后查询。但是,在 DFS 完成后,信息会被删除,所以我假设它使用副本。除了对所有私有变量使用指针之外,有没有办法防止这种情况并让 boost 使用我的副本?
您可以尝试通过包裹在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 而不是访问者对象。引用的副本将引用与原始实例相同的实例。
信息是访问者的一部分真的有意义吗?
我的猜测是信息在逻辑上属于图表,应该存储在那里,而不是访问者中。
您可以在访问者中存储对图表的引用。然后,当访问者遍历图表时,它可以更新与图表一起存储的信息。
结果是在访问者的工作完成后销毁访问者是可以的,因为结果将作为图形的一部分持续存在。