
Hi, I've been thinking about adding properties to C++ for some time, and I've written several different Property<T> classes, so I've been following this discussion with great interest. IMO C# properties are not as useful as they should be; I think that ideally a property is a declarative expression that automatically generates getter and/or setter code. For example I've been experimenting with a syntax that looks like this: struct Example { explicit Example( std::string& strName): name( strName ), count( 0 ) { } Property< std::string, public_get, private_set> name; Property< int, public_get, public_set> count; }; Now I should be able to write: void SomeFunc( std::string& strValue ) { Example x( strValue ); x.count = 5; int I = x.count; std::string strName = x.name; } The point to this exercise is that as a developer I want to write less code, not more. Here I see an opportunity to build a system to generate code for me. So rather than emulate C# properties, I'm hoping that C++ can come up with something better. David -----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of Stefan Strasser Sent: Tuesday, October 20, 2009 1:30 PM To: boost@lists.boost.org Subject: Re: [boost] [property] interest in C# like properties for C++? Am Tuesday 20 October 2009 22:07:28 schrieb Matthew Chambers:
Do you plan to have a macro for defining simple/trivial properties with a single line?
I think that this is the only thing that's missing from c++, and that it doesn't need a C# properties syntax. the C++ "properties" syntax is, for example (taken from tr1::unordered_map): float max_load_factor() const; void max_load_factor(float z); I wouldn't even consider your proposed properties syntax "syntactic sugar". it's just a different syntax, not a better one imho. so if there's anything missing from c++ it would be something like #define BOOST_TRIVIAL_PROPERTY(T,name) \ T name() const{ return _name; } \ void name(T __name){ _name=__name; } \ T _name; some of the problems your syntax introduces have already been mentioned. another one is that the getters and setters can not be virtual. C# and C++/CLI allow overriding setters and getters, and pure virtual properties, but I don't think that can be achieved with the same syntax in C++, since setters/getters are functions of seperate nested classes. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost