D - casting overloads and properties
- Jon Allen (48/48) Feb 14 2003 I was thinking that if D supported overloading of casting, and
I was thinking that if D supported overloading of casting, and
assignment operators like c++ then it would be really easy to implement
properties as part of a library, rather than as part of the actual
language spec. This would allow me and I'm sure others to have their
properties and Walter wouldn't have to implement them in the compiler.
There are a ton of other uses for casting operator overloads, but this
is the one I'm mainly interested in at the moment. I actually thought
that the assignment operator could be overloaded, but when I went to
look for the function name I didn't see it. If these things can already
be done, please tell me. I propose something like this:
template TBaseProp(T)
{
class DBaseProp
{
protected:
T prop;
T getter(){return prop);
T setter(T newval){return prop=newval);
T delegate() getfunc;
T delegate(T) setfunc;
public:
this()
{
this(&getter, &setter);
}
this(T delegate() dget, T delegate(T) dset)
{
getfunc=dget;
setfunc=dset;
}
T ass(T newval) //for assign, as in = not the other thing :-)
{
return setfunc(newval);
}
T cast() //cast overload of course
{
return getfunc();
}
}
}
instance TBaseProp(bit) bitprop;
now it's easy to create properties for any fields in a class, and
implementing custom handlers for them is as easy as writing the handler
and changing the one line of code that calls the properties constructor.
of course some more operators would need to be overloaded, a couple more
constructors are needed and a few more templates (numeric and array
properties), but that's all just as easy.
What do you all think? Good Idea, Bad Idea?
Feb 14 2003








Jon Allen <jallen minotstateu.edu>