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