|
Boost : |
Subject: Re: [boost] interest in properties library
From: Daniel Oberhoff (daniel.oberhoff_at_[hidden])
Date: 2008-12-20 08:29:53
> On Fri, Dec 19, 2008 at 5:50 AM, Daniel Oberhoff <
> daniel.oberhoff_at_[hidden]> wrote:
> > Hi,
> >
> > I am thinking about submitting a library proposal and would like
> to query
> > wether there is any interest in such a library and chance of
> success of such
> > a proposal.
> >
> > The basic idea is to implement the possibility to decorate a class
> with
> > named properties, such that given a pointer to an instance
> properties can be
> > accessed by name rather than using set/get methods. Also the type
> of the
> > instance should not need to be known at compile time, other than
> that it
> > derives from a suitable base class describing the property
> mechanisms.
> >
> > There is a rough implementation existing and used in a product
> environment.
> > Setting and getting is done using appropriate boost functions. Type
> > resolution is done using RTTI (especially dynamic cast). Complex
> inheritance
> > hierarchies are supported through virtual inheritance from the
> base class,
> > such that several classes along the hierarchy can contribute
> property slots.
> > CRTP and static initialization is used to register properties.
> Convenient
> > setter/getter function generators are provided as is a mechanism
> to access
> > nested properties using dot notation.
>
> I'm not sure I follow exactly what you mean, could you give a small
> example
> of the interface and usage? It sounds like you are referring to
> something
> along the lines of C# properties though I don't immediately see what
> you are
> using dynamic casting for or what exactly this provides as a benefit
> over
> get/set methods. Thanks.
sorry, forgot the examples. so, to enable properties for a class:
class Foo : public HasProperties<VariantTypes, foo>
{
protected:
typedef HasProperties<VariantTypes, foo> PBase;
typedef Foo This;
static void init_properties()
{
PBase::add_ivar_property_rw( "a", &This::a );
}
private:
int a;
};
usage:
HasPropertiesBase<VariantTypes> * foo = new Foo;
foo->set_property("a", 1);
int a = get<int>( foo->get_property( "a" ) );
Here VariantTyped is a mpl::sequence
Furthermore it still works when a class has several such properties
activated classes along its inheritance ancestors, and all properties
can be acessed unless there is a name conflict, in which case classes
further down override properties from its ancestors, though this could
be handled differently.
What I still want to do is enable simpler syntax and maybe signals
triggered by property and other goodies, but that is actually rather
simple to do, using bind and/or lambda.
Best
Daniel
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk