Template Mixins are patterns used to generate actual code instances using the compiler in D programming. Codes like functions, structs, unions, classes, interfaces, and any other legal D code can be generated using template mixins.
mixin a_template!(template_parameters)
Template mixins can be parameterized, this means that they can accept arguments.
import std.stdio : writeln;
mixin template Test(Z)
{
Z x = 5;
}
mixin Test!(int); // create x of type int
Template mixins have two scopes:
Mixins are evaluated where their scope is called, not created, and their surrounding scope overrides the global scope.
Let’s look at the code below:
import std.stdio : writeln;int a = 7;mixin template Foo(){int a = 50;int b = 50;}mixin Foo;int b = 39; // surrounding scopevoid main(){writeln("b = ", b);}
Line 12: The int b
value overrides the int b
value in line 8.
To get a better understanding of template mixins, let’s see the example below:
import std.stdio : writeln;mixin template Foo(){int x = 5;}void main(){mixin Foo;writeln("x = ", x); // prints 5x = 4;writeln("x = ", x); // prints 4}
mixin template Foo()
using the mixin
and template
keywords.x
and assign a value of 5 to it.mixin
.x
, but we can print a value from it after calling the Foo
mixin. Because in the Foo
mixin, we have x
defined with the value of 5.x
to 4.x
value to the screen.