
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
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
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
such that several classes along the hierarchy can contribute
On Fri, Dec 19, 2008 at 5:50 AM, Daniel Oberhoff < daniel.oberhoff_at_[hidden]> wrote: properties can be that it base class, 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