Mixin template functions are ignored in struct

tcak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Oct 14 14:21:32 PDT 2014


On Tuesday, 14 October 2014 at 21:10:02 UTC, anonymous wrote:
> 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;
> 	}
> }

Hmm, so it is not able to mix enough then. That's a weird 
decision though. Anyway, that suggested usage is making my work 
harder. I am putting that mixin in many struct and defining each 
method one by one in that way doesn't seem like suitable to me.


More information about the Digitalmars-d-learn mailing list