Boost logo

Boost :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2004-04-15 05:56:46

I've just made an attempt to use the named parameters library (currently in
review queue, and available at to simply
properties in BGL.

Currently, to initialize all properties one has to do:

    edge_descriptor e = add_edge(....);
    put(e, g, vertex_color, 10);
    put(e, g, vertex_name, "foo");

I hope that with the named parameters library it will be possible to do:

   add_edge(v1, v2, (vertex_color = 10, vertex_name = "foo"), g);

I've tried to implement this idea, but run into the problems. First issue is
documentation: it gives


as example, while the code uses:

   return f_impl(f_keywords()(t, name_));

Which has extra '()' after f_keywords.

The second problem is that I need to create a type for 'keywords' (derived
from 'keywords<...>' and use it for passing arguments). The docs suggest to
create a number of forwarding functions, but given that a number of vertex
properties can be rather large (and is actually unbounded), this does not
seem good.

So, now can do:

    vertex_property p = prop_keywords()(color = 10, name = "foo");

but I'd rather like:

    vertex_property p((color = 10, name = "foo"));

So, the operator, will be overloaded to create something I can index with 'tag
type' and get a value. In fact, this will allow to avoid declaring
'pop_keywords' -- since again, user can declare it's own keywords so it's not
clear how to define that class.

The example I've played with is at:

Comments are appreciated.

- Volodya

Boost list run by bdawes at, gregod at, cpdaniel at, john at