Boost logo

Boost Users :

Subject: Re: [Boost-users] [BGL] vis passed by value to depth_first_visit
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2011-04-20 13:13:19


On Tue, 19 Apr 2011, Shaun Jackman wrote:

> Hi,
>
> I recently learned the hard way that the visitor parameter, vis, is
> passed by value to depth_first_visit, but passed by reference to
> detail::depth_first_visit_impl.
>
> I was writing a function that implemented depth_first_search, but starts
> each of the visits at vertices with indegree == 0. If my
> depth_first_search replacement calls boost::depth_first_visit, each call
> to depth_first_visit makes a copy of the output iterator, which doesn't
> work for an output iterator with any state (such as a pointer).
>
> Calling an internal boost function like detail::depth_first_visit_impl
> doesn't seem like a good plan. How should I solve this?
>
> My short-term work around is to use an output iterator that does not
> have any state, such as a back_inserter.

Does passing in boost::ref(vis) work? Otherwise, have your visitor keep a
reference to the state that should be modified outside the visitor
(copying a reference just leads to another reference to the same object).

-- Jeremiah Willcock


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net