On 02/05/10 07:14, Dan wrote:
Hi everyone,

is there anyway to do this with operators overloading? :

The following code does it:
----
class Tester
{
        double x = 0.0;

        T opBinary(string op:"+", T)(T value) if(is(T : double))
        {
                return x+value;
        }

        T opBinary(string op:"+", T)(T other) if(is(T : Tester))
        {
                Tester ret = new Tester;
                ret.x = this.x + other.x;
                return ret;
        }
}

int main(char[][] args)
{
        Tester t1 = new Tester;
        Tester t2 = new Tester;

        t1.x = 1.0;
        t2.x = 2.0;

        Tester t3 = new Tester;
        t3 = t1+t2;
        assert (t3.x == 3.0);

        return 0;
}
----

Some variations from the original code:

 - Fixed the assert ==, not =
- Made sure all testers are initialised... Don't forget to instantiate classes before you use them, otherwise you'll end up with segmentation faults - Fixed a semantic error in the latter of the binary functions - an empty Tester is at 0, if you want to add them you need to make sure you do that, not just add other

I'd also advise you replace Tester with a struct if you won't be needing inheritance, this way you save some memory overhead, and don't have to remember to use = new Tester; Hope this helps :)

Reply via email to