
On Fri, Oct 23, 2009 at 3:40 PM, Edward Diener <eldiener@tropicsoft.com> wrote:
Maybe I should've said class reference. Take std::string for example. I'd be very interested if you've got code that supports for example name.size() where name is your reference property class. name->size() is no problem, but I'd like to have name.size().
I understand your point, and you are right, and this is a notational weakness as compared with accessing the data directly.
I don't believe that one can define a dot ( '.' ) operator in C++ but maybe there is a metaprogramming way to hijack the dot operator. If there is I would be glad to use it.
Actually I have rejected defining the -> operator for my reference properties, because -> implies a pointer in standard C++ terminology and I do not think of reference properties "pointing" to their type object. Instead my reference properties have currently no built-in forwarder operator to the actual type object. One could currently use the more laborious form of:
propertyReference<std::string> name; std::string & avar = name; // read/write property reference getter avar.size() = 10; // or std::string::size_type sz(avar.size());
Unacceptable
or one could use my getter member function so one could write:
propertyReference<std::string> name; name.getReference.size() = 10; // or std::string::size_type sz(name.getReference.size());
Unacceptable
Using a member function rather than an operator in this case is just a little more inconvenient.
For me, the access syntax of properties is *the* reason for using them. Otherwise you might as well just add string& name() and void set_name(const string&) functions to your class. What are your goals/reasons to use properties?
My member function is actually currently called "getValue" for my reference property but I have decided that it is a confusing name since one is really getting a reference, and have changed it to "getReference".
How about just get()?
-----------------------------------------------------------------------
"So really one would not a separate template class to support reference properties."
This was originally mistyped by me and should have been:
"So really one would need a separate template class to support reference properties."
But I think you read through my error anyway without any problems.
Probably. ;)