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.