Boost logo

Boost Users :

From: Cyrille Damez (damez_at_[hidden])
Date: 2004-05-11 07:29:30


Hi all,

I'm currently trying to write a wrapper in order to use the BGL algorithms
and visitors on a home-made graph class. If I'm not mistaken, this requires me
to write (amongst other things) a couple functions that will return iterators
over my graph edges and vertices, eg:

std::pair<graph_traits<MyGraph>::out_edge_iterator,
          graph_traits<MyGraph>::out_edge_iterator >
out_edges(graph_traits<MyGraph>::vertex_descriptor u,
          const MyGraph& g)

and similarly in_edges(...) , vertices(...) and edges(...) functions. However,
it seems that this function profile forces me to do a const_cast on g when
implementing the function body since the out_edge_iterators are not const
iterators, though they point to internal elements of g.

I had a look at the example given in the documentation (dealing with
converting LEDA graphs to the BGL), but I didn't see anything helping me on
this particular issue (also, the example in the doc is a bit outdated since it
uses the deprecated Boost iterator adaptors).

Am I forced to rely on const_cast in these functions, or is there a way to
declare my graph edges, vertices and the corresponding iterators as
const in my graph_traits class ?

I'm a newbie with the BGL, and more generally with this whole traits/template
specialization style of programming, so please excuse me if I overlooked
something obvious.

Cheers.


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