Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top