On Sat, 24 Apr 2010 05:07:41 -0400, Dan <daniele.ni...@gmail.com> wrote:

So there's my questions
Why D2 changed in this way the operators overloading?

To avoid repeating tons of boilerplate code.

For example, you can do this:

void opOpAssign(string op)(ref Vector3 other) if (op == "+=" || op == "-=")
{
   mixin("x " ~ op ~ " other.x");
   mixin("y " ~ op ~ " other.y");
   mixin("z " ~ op ~ " other.z");
}

This takes care of 2 functions with one implementation. Other types might enjoy even more operator coverage, but vectors can't be generalized for all operators to one function.

I saw the the compiler compiles both the functions, even considering this I assume it's not safe to use the old D1 way,
right?

operator overloads are not special functions, they are just normal functions that the compiler calls. You can still build opAddAssign because there is nothing inherently special about that function. opAddAssign is a valid symbol name.

Oh, and I've found the documentation really confusing on this metter.

Hopefully the book will clear this up.

-Steve

Reply via email to