Использование Boost :: Devine_first_Search с посетителем
-
11-10-2019 - |
Вопрос
Как следует из названия, я использую 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)
Возвращает а boost::reference_wrapper<YourVisitorClass>
. Анкет Когда depth_first_search
Создает копию этих аргументов, он скопирует reference_wrapper вместо объекта для посетителя. Копии ссылки будут относиться к тому же экземпляру, что и оригинал.