www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Overload on opDispatch ?

reply Jacob Carlborg <doob me.com> writes:
Would it be a good idea to allow overloading on opDispatch to make the 
following compile, what do you think?

import std.stdio;

class C
{
     void opDispatch(string s, ARGS...) (ARGS args)
     {
	writefln("S.opDispatch('%s', %s)", s, typeof(args).stringof);
     }

     void foo (string s)
     {
         writeln("in asd");
     }
}

void main()
{
     C c = new C;
     c.foo("bar"); // calls C.foo
     c.foo("bar", "bar"); // calls C.opDispatch
     c.foo(3); // calls C.opDispatch
}
Dec 05 2009
parent Tim Matthews <tim.matthews7 gmail.com> writes:
Jacob Carlborg wrote:
 Would it be a good idea to allow overloading on opDispatch to make the 
 following compile, what do you think?
 
 import std.stdio;
 
 class C
 {
     void opDispatch(string s, ARGS...) (ARGS args)
     {
     writefln("S.opDispatch('%s', %s)", s, typeof(args).stringof);
     }
 
     void foo (string s)
     {
         writeln("in asd");
     }
 }
 
 void main()
 {
     C c = new C;
     c.foo("bar"); // calls C.foo
     c.foo("bar", "bar"); // calls C.opDispatch
     c.foo(3); // calls C.opDispatch
 }

Do you think it would be a good idea? or just want to know what others think for no obvious motive? If the latter: absolutely not. It would be a major source of bugs. That code would be much safer if C.foo was a private method that opdispatch called when it determines its arguments met the requirements.
Dec 05 2009