|
Boost : |
From: Ivan Vecerina (ivec_at_[hidden])
Date: 2006-04-22 10:28:50
"Thorsten Ottosen" <thorsten.ottosen_at_[hidden]> wrote in message
news:4449FFDF.4000107_at_dezide.com...
: some simple function would allow you to write
:
: data.set( p / "debug" / "info" / "testfail" / at(2) , "file.hpp" );
Somehow I find it inelegant to be composing a path object
(vector of strings?) instead of directly indexing the structure.
It might be "cool" if we could write:
pt / "debug" / "info" / "testfail" % 2 = "file.hpp" ;
But there is a problem: the desired behavior of "path access"
is not the same whether one is reading or setting a value
-- as demonstrated by the std::map::operator[] snafu:
If the path does not currently exist, we will want a 'put'
operation to succeed, while a 'get' operation should either
fail (throw an exception) or return a dummy "null" tree.
I don't have time to seriously look into this, but I'm sure
that a solution can be worked out.
In my experience, however, I have rarely(ever?) needed to
directly access a 'deep' field of a tree with a path.
IMO it would be very reasonable to initially accept ptree
without a path-access mechanism -- which can easily be
added latter -- if we find that things are already
complicated enough this way.
Just for laughs:
put( pt ) / "debug" / "info" / "testfail" % 2 << "file.hpp" ;
get( pt ) / "debug" / "info" / "testfail" % 2 >> var;
tryget( pt ) / "debug" / "info" / "testfail" % 2 >> var || (var=5);
- no explicit template params are ever specified
- default value is optionally specified after a ||,
but the default expression is not evaluated if not used.
But don't you ever quote me on this ! ;-)
Ivan
-- http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk