Re: [Boost-users] [graph] BFS and dedicated color map

"Jens Muller"
Jens, I think that you are missing something. As for me, the property_traits class is just a way of uniform data manipulation.
If every pm needed to be a class, there would be no need for the *_traits template classes.
http://www.boost.org/libs/graph/doc/leda_conversion.html
The Adaptor pattern [12] typically requires that the adaptee object be contained inside a new class that provides the desired interface. This containment is not required when wrapping a graph for BGL because the BGL graph interface consists solely of free (global) functions. Instead of creating a new graph class, you need to overload all the free functions required by the interface. We call this free function wrapper approach external adaptation
...
All types associated with a BGL graph class are accessed though the graph_traits class. We can partially specialize this traits class for the LEDA GRAPH class in the following way.
The same is done here for vectors and the like.
Unfortunately I can't follow this :-(
Your class has to be a model of this abstract concept. (To be a Read Property Map it is enough to have 3 typedefs and get() function, see Concept Checking Class in the documentation that you referred).
Yes, it says the get() free function and 3 typedefs in property_traits need to be defined.
Anyway, it works now, see attachments.
The changes in "bfs_map_test.cpp" are exactly I was thinking of)
One question remains, though:
template
ColorValue MapAsColorMap ::get(key_type key) { return (boost::get(pm_, key)==white_) ? boost::color_traits<ColorValue>::white() : boost::color_traits<ColorValue>::black(); } works, while get(pm_, key) without boost:: doesn't.
Shouldn't the right get function be found by Koenig lookup?
Probably yes, but AFAIK not all compilers have it implemented.
http://www.boost.org/libs/property_map/ReadablePropertyMap.html says, too, that get is required, not boost::get ...
I think this is because ReadablePropertyMapConcept class already defined in boost:: namespace. Regards, --Dmitry.
participants (1)
-
Dmitry