Static operator overloads are possible why?
Giles Bathgate
gilesbathgate at gmail.com
Fri Jun 29 15:01:16 PDT 2007
Dear Mr Bright;
I have been playing with D and have come across what I believe to be a bug/feature idea.
It all started when I tried to emulate C# Style events, (Dont worry this is not a request to add events to the language)
I was really impressed by the power of the D language and found that I could make what microsoft call Multicast delegates
So in my opinion there is no need to add them.
However,
the way I add handlers to the multicast delegate is using the following syntax:
this.add_Paint = new PaintEventHandler(&Form1_Paint);
as opposed to microsofts syntax of
this.Paint += new PaintEventHandler(Form1_Paint);
So I started investigating using opAddAssign overloads.
Ok Introduction over Let me get to the point.
Consider the following code:
public class Test
{
public char[] Name;
public Test opAddAssign(Test value)
{
writefln(value.Name);
//TODO...
}
}
int Main()
{
Test t;
Test b = new Test();
t += b; //Runtime exception because t is null
}
This code obviously has a runtime exception because t was not assigned and the translation of the code t += b; becomes
t.opAddAssign(b); 'ok I thought', I shall make the operator overload static...'er no wait can I do that?'
half expecting a compile error I tried anyway
public class Test
{
public char[] Name;
public static Test opAddAssign(Test value)
{
writefln(value.Name);
//TODO...
}
}
int Main()
{
Test t;
Test b = new Test();
b.Name = "foo"
t += b; // Translates to: Test.opAddAssign(b);
}
output: foo
The code compiles, and runs, and opAddAssign actually gets called,
but wait surely t += b; translates to Test.opAddAssign(b);
So how is that in anyway usefull? we have no reference to t, within our operator overload call.
(In the first example the reference to t could have been referenced by this)
So my question; 'should static operator overloads even be allowed?'
and if they were to be allowed should they not have two arguments?
thus:
static Test opAddAssign(Test t, Test value){...}
then
t += b;
becomes
Test.opAddAssign(t,b);
Static operator overloads would be useful to me for this one particular application.
Whats you view?
Regards
Mr _Bathgate;
More information about the Digitalmars-d
mailing list