Использование boost :: deep_first_search с посетителем - PullRequest
3 голосов
/ 16 января 2011

Как видно из заголовка, я использую boost::depth_first_search и использую Visitor (наследующий от boost::default_dfs_visitor) для реализации некоторого алгоритма.

Однако, во время работы алгоритма я хочу сохранить некоторую информацию в посетителе, чтобы запросить ее позже. Однако после удаления DFS информация стирается, поэтому я предполагаю, что она использует копию. Кроме использования указателей для всех частных переменных, есть ли способ предотвратить это и заставить boost использовать мою копию?

Ответы [ 2 ]

2 голосов
/ 16 января 2011

Вы можете попробовать передать своего посетителя, завернутого в 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 вместо объекта посетителя. Копии ссылки будут ссылаться на тот же экземпляр, что и оригинал.

1 голос
/ 17 января 2011

Действительно ли имеет смысл, что информация является частью посетителя?

Я предполагаю, что информация логически принадлежит графу и должна храниться там, а не в посетителе.

Вы можете сохранить ссылку на график у посетителя.Затем, когда посетитель пересекает график, он может обновить информацию, хранящуюся в графике.

В результате можно уничтожить посетителя по завершении его работы, поскольку результаты будут сохраняться какчасть графика.

...