How to require operator overloading in interface

Jesse Phillips Jesse.K.Phillips+D at gmail.com
Sat Jul 20 11:34:29 PDT 2013


On Saturday, 20 July 2013 at 16:46:52 UTC, JS wrote:
>  	class MyClass {
>  		auto opBinary(string op : "|" T : int)(T t) { }
>                 // opBinary is completely specialized and is no 
> different than a regular function, it can be overridden 
> directly in children without having to use a redirection. (note 
> in your opBinaryImpl, T must be specified
>  	}

I understand there is a little boilerplate when wanting to have 
overriding for the operator overloads, but I don't see much gain 
from the proposal.

Do you really want to force people to write

     int opBinary(string op : "|" T : int)(T t)

instead of

     override int opOr(int t)

when trying to override your function?

Though it might be interesting if an aliased function could be 
overridden:

class I {
     final int opBinary(string op)(int t) { ... }
     alias opAdd = opBinary!"+";
}

class MyClass : I{
     override int opAdd(int v) { ... }
}


More information about the Digitalmars-d-learn mailing list