First:
Why is opDot not listed here: http://dlang.org/operatoroverloading.html ?
How much other operators exists which are not listed there?

And:
Is opDot the same as alias this? I think so.

This code

[code]
class Foo {
public:
        void echo() const {
                writeln("Foo");
        }
}

class Test {
private:
        Foo _f;

public:
        this(ref Foo f) {
                this._f = f;
        }

        @property
        ref Foo opDot() {
                return this._f;
        }
}
[/code]

Works exactly as these:

[code]
class Test2 {
private:
        Foo _f;

public:
        this(ref Foo f) {
                this._f = f;
        }

        @property
        ref Foo Get() {
                return this._f;
        }

        alias Get this;
}
[/code]

But with opDot it is shorter. What are the advantages and disadvantages of both?

Which of them should i use? Will one of them disappear in the future? I think opDot is more flexible as alias this. You can have one alias this for one class/struct, but various opDot's, as this example shows:

[code]
class Foo {
public:
        void echo() const {
                writeln("Foo");
        }
}

class Bar {
public:
        void echo() const {
                writeln("Bar");
        }
}

class Test3 {
private:
        Foo _f;
        Bar _b;

public:
        this(ref Foo f, ref Bar b) {
                this._f = f;
                this._b = b;
        }

        @property
        ref Foo opDot() {
                return this._f;
        }

        @property
        const(Bar) opDot() const {
                return this._b;
        }
}
[/code]

If Test3 is unconst, it prints with Foo, otherwise with Bar.

Reply via email to