On Tuesday, 14 October 2014 at 20:58:19 UTC, tcak wrote:
I have written a struct and a mixin template, and that mixin template is mixed into that struct as follows.

private mixin template TestCommonMethods(){
        public bool apply( int d, int e ){
                return false;
        }
}

public struct Test{
        public mixin TestCommonMethods;

        public bool apply( char c ){
                return true;
        }
}

void main(){
        Test t;
        t.apply( 5, 3 );
}

---

For the line "t.apply( 5, 3 );", error is given saying that "function test.apply(char c) is not callable".

---

For better testing, I added another function to template as "public bool blah(){}", and called it in main, and it works. So, thus this mean overloading is not supported with mixin templates?

http://dlang.org/template-mixin.html says:
If the name of a declaration in a mixin is the same as a declaration in the surrounding scope, the surrounding declaration overrides the mixin one

So, yes, the mixed in `apply` doesn't overload with the other one.

You can use an alias declaration to bring them together:

public struct Test{
        public mixin TestCommonMethods Common;
        alias apply = Common.apply;

        public bool apply( char c ){
                return true;
        }
}

Reply via email to