Hello,
I'm working in a graph algorithm that works on graphs that implement
BidirectionalGraphConcept and
VertexAndEdgeListGraphConcept.
The only additional requirement is that they must have some concrete bundled properties
(I don't want to
deal with the, I understand old, method of defining properties).
For example, if g is a graph and v is a valid vertex descriptor of that
graph,
g[v].min
must be a valid boolean expression.
I have defined template classes for those bundled properties, but I
wish not to impose using those concrete classes.
To do so, I never get g[v] in a variable to later access the properties. For example, I always
write
g[v].min
instead of something like
BundledVertexPropertyType &p=g[v];
p.min
Ok, for the
moment.
The problem is that, at some point of my algorithm (concretely when wanting to invoke the topological_sort
BGL algorithm) I must
have knowledge of what's the concrete type of the bundled properties
(i.e., I need to know that BundledVertexPropertyType written before).
I can't find in BGL documentation a way to do that. I look, for example, for something like, imagine,
graph_traits<Graph>::bundled_vertex_properties_type
Is there a documented way to achieve that?
If not, is there any way how
I can get a property map to provide access to a bundled property without knowing the bundled-property type?
Right now I'm using an expression
like the following one:
get(&BundledVertexPropertyType::index,g)
But this obviously requires knowing the
BundledVertexPropertyType when writing the code. Is there any way to avoid it?
Thanks a lot,
Juan