Should we add `a * b` for vectors?

jmh530 john.michael.hall at gmail.com
Tue Oct 3 20:24:35 UTC 2017


On Tuesday, 3 October 2017 at 19:25:32 UTC, Walter Bright wrote:
>
> This gets into the anti-hijacking support D has (and C++ does 
> not). If multiple modules with declarations of `writeln` are in 
> scope, the compiler attempts a match with `writeln` in each 
> module. If there is a match with more than one module, an error 
> is issued. The user will then have to specify which one he 
> wants.
>

Anti-hacking might make it tricky to have operators as 
free-standing functions, but I'm not sure it would be impossible. 
The solution for function overloading is fully qualified names. 
However, this does not make sense operator overloading. Mixing 
operator overloading and D's anti-hijacking, you would basically 
be prevented from having two overloaded versions of an operator. 
This means that if you want multiple versions of operators, you 
would not be able to have the operators as member functions and 
they would have to be free-standing functions, ideally in 
separate modules.

With respect to the earlier discussion of type wrappers, this can 
also be implemented with a template parameters that controls the 
operator-overloading of *, something like below.

struct Foo(bool mtimesOverload = false)
{
     template opBinary(string op = "*")(Foo foo)
     {
         static if (mtimesOverload)
         {
             return mtimes(this, foo);
         }
         else
         {
             return times(this, foo);
         }
     }
}

So you could do a Matrix alias that has mtimesOverload=true.


More information about the Digitalmars-d mailing list