opStar
Steven Schveighoffer
schveiguy at yahoo.com
Sat Nov 10 06:12:00 PST 2007
"Janice Caron" wrote
> So, we can write p.m for real pointers, but we have to write (*p).m
> for classes that implement opStar()?
You can also write (*p).m for pointers :P
> That seems inconsistent.
I think it has to be. If we examine C++, the normal pointer operator -> has
no real meaning by default for a class. This allows them to define the
operator without possibility of collision.
In D, the dot DOES have a meaning, and so you would be overriding that
meaning depending on the member variable. To illustrate the point, what if
you have a pointer class template, somone uses it, but happens to point to a
class that has a member named the same as one of the pointer class' members?
Now your pointer class has no value for that specific class type.
> What's opStar for, if not to implement iterators?
You can still implement iterators, even without opStar.
With opStar, if you consistently use pointers in the (*p).m fashion, a
pointer class can be swapped in. Yeah, it's ugly, but possible :) If you
are writing a template function that should take either pointers or
pointer-like classes, then write the (*p).m form, and it should work.
-Steve
More information about the Digitalmars-d
mailing list