
On Dec 23, 2005, at 8:25 AM, Nicola Vitacolonna wrote:
template <typename VertexProperty = no_property> class MyGraphWrapper { private: typedef adjacency_list<vecS, listS, bidirectionalS, property<vertex_index_t, int, VertexProperty> > GraphImpl; // ... }; [snip] My test compiled and it seems to run fine. Is it really possible/ safe to mix bundle properties with property lists in this way?
Yes, this is correct.
Or, is there a way to avoid property lists?
Not cleanly. You could aggregate an index property with the VertexProperty class (or derive from VertexProperty), e.g., template<typename BaseProperty> struct WrapVertexProperty : public BaseProperty { WrapVertexProperty() : BaseProperty() { } WrapVertexProperty(const BaseProperty& bp) : BaseProperty(bp) { } std::size_t index; // your index property }; template<> struct WrapVertexProperty<no_property> { WrapVertexProperty() {} WrapVertexProperty(const no_property&) {}; std::size_t index; // your index property }; This solution isn't quite perfect, unfortunately: algorithms that look for a "vertex_index" property won't find WrapVertexProperty<...>::index, so you'll have to supply vertex index maps to your algorithms or have MyGraphWrapper convert requests for "vertex_index" into requests for &WrapVertexProperty<...>::index. This is on our TODO list to fix, so that bundled properties can integrate more cleanly. Doug