template mixins vs alias

Daniel Kozak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Feb 22 06:25:27 PST 2016


In your case I would guess with -O -release -inline it would generate 
assambly with same (similar) speed.

But in this case it would be different:

mixin template Test()
{
     int returnInit() { return int.init; }
}


int returnInitImpl() { return int.init; }


class A
{
     mixin Test!(); // add virtual method
}

class B
{
     alias returnInit = returnInitImpl;
}


import std.stdio;

void main()
{
     auto a = new A();
     auto b = new B();

     a.returnInit().writeln;
     b.returnInit().writeln;
}

Dne 22.2.2016 v 15:12 Andrea Fontana via Digitalmars-d-learn napsal(a):
> On Monday, 22 February 2016 at 13:56:19 UTC, anonymous wrote:
>> On Monday, 22 February 2016 at 13:35:10 UTC, Andrea Fontana wrote:
>>> Check this code:
>>> http://dpaste.dzfl.pl/fcf876acbbdc
>>>
>>> Structs A and B do the same things, in different way.
>>>
>>> Is there any difference/limitation between those?
>>>
>>> Andrea
>>
>> The mixin variant generates a method. That means, you can reference 
>> members of the struct in the function.
>
> Of course, but that's not the case.
>
>> What's nicer about the alias version is that you see what symbol is 
>> being generated. It's obvious that `alias returnInit = 
>> returnInitImpl!int;` creates a symbol "returnInit". In the mixin 
>> variant, you have to read the template's source to see that.
>
> I wonder whether one version generates faster assembly or not.
>



More information about the Digitalmars-d-learn mailing list