Question

Comme le titre l'indique, j'utilise boost::depth_first_search et en utilisant un visiteur (héritant de boost::default_dfs_visitor) pour mettre en œuvre un algorithme.

Cependant, pendant l'exécution de l'algorithme, je veux enregistrer des informations dans le visiteur, à interroger plus tard. Cependant, les informations sont effacées après la DFS est fait, je suppose qu'il utilise une copie. Autre que d'utiliser simplement des pointeurs pour toutes les variables privées , est-il un moyen d'éviter cela et utiliser boost ma copie?

Était-ce utile?

La solution

Est-il vraiment de sens que l'information fait partie du visiteur?

Je suppose que l'information appartient logiquement avec le graphique, et devrait y être stocké, pas le visiteur.

Vous pouvez stocker une référence au graphique du visiteur. Puis, le visiteur parcourt le graphique, il peut mettre à jour les informations qui sont stockées avec le graphique.

Le résultat est qu'il est correct de détruire le visiteur lorsque son travail est fait, parce que les résultats persisteront dans le cadre du graphique.

Autres conseils

Vous pouvez essayer de passer votre visiteur enveloppé dans un boost::reference_wrapper .

Modifier - Teh codez

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

boost::ref(your_visitor) retourne un boost::reference_wrapper<YourVisitorClass>. Lorsque depth_first_search crée une copie de ces arguments, il copie le reference_wrapper au lieu de l'objet visiteur. Des copies de la référence se référeront à la même instance que l'original.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top