3

タイトルが示すように、私はboost::depth_first_searchVisitor (から継承boost::default_dfs_visitor) を使用していくつかのアルゴリズムを実装しています。

ただし、アルゴリズムの実行中に、後で照会できるように、いくつかの情報をビジターに保存したいと考えています。ただし、DFSが完了すると情報が消去されるため、コピーを使用していると思います。すべてのプライベート変数にポインターを使用する以外に、これを防ぎ、ブーストに私のコピーを使用させる方法はありますか?

4

2 に答える 2

2

でラップされたビジターを渡してみることができますboost::reference_wrapper

編集 - コーデックス

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 に答える