
Stefan Strasser wrote:
Am Wednesday 21 October 2009 10:27:08 schrieb Edward Diener:
Properties are just syntactic sugar for accessors to retrieve or set a "data" value which is part of an object. In other languages in which properties exist, such as C#, C++/CLI, C++ Builder, and Python, the syntax uses the form of "x = value" to set the "data" value x and "variable = x" to retrieve the "data" value x. There is nothing which intrinsically makes this form of syntactic sugar better or worse than "x = value()" and "variable = x()", as you suggest, other than common usage in other languages and the concept that a property represents at least theoretically some piece of "data" of that object, even though that "data" may not actually exist.
I think it would be wise to keep the same syntactical form for property in C++ which commonly exists in other languages.
I don't think that's wise at all. standard practices exist for a reason.
that's like using UpperCaseNaming in the public interface of your classes, rather than lower_case_naming, because other languages do and you think it looks nicer. you might be right about that, but it requires everyone who uses your classes to know your syntax preferences, instead of just the standard. I've used properties in C# and there is no reason not to use them. in C++, I wouldn't use a C#-like properties syntax for this reason alone, even if all previously mentioned problems could be solved - there is an established C++ properties syntax.
I don't agree that what you call C++ properties are standard or widely used. I think the get/set prefix is probably just as widely used (just not in boost or std). Even in cases where one does find both get/set properties in the style you say is standard, X() and X(value), the X(value) function almost never returns X& (with both const and non-const overloads). This means that it can't be used in a chain of assignment operations like A.X(B.X(5)) which incidentally looks awful compared to A.X = B.X = 5. For properties, operator= is greater than operator() ;) -Matt