混合类型的结构,使所生成的代码中混合类型的源代码。混合类型可以是以下类型。
-
String 混合类型
-
Template 混合类型
-
混合命名空间
String 混合类型
D语言有字符串在编译时插入代码串的能力。字符串混合类型的语法如下所示。
mixin (compile_time_generated_string)
一个简单字符串混合类型的例子如下所示。
import std.stdio void main() { mixin(`writeln("Hello World!")`) }
当上面的代码被编译并执行,它会产生结果如下:
Hello World!
这里是另一个例子,我们可以通过在字符串中的编译时间,以便混合类型可以使用函数来重用代码。它如下所示。
import std.stdio string print(string s) { return `writeln("` ~ s ~ `")` } void main() { mixin (print("str1")) mixin (print("str2")) }
当上面的代码被编译并执行,它会产生结果如下:
str1 str2
模板混合类型
D语言模板定义通用的代码模式,让编译器来生成该模式的实际情况。模板可以生成功能,结构,联合,类,接口,以及任何其他合法D代码。模板混合类型的语法如下所示。
mixin a_template!(template_parameters)
一个简单的例子字符串混合类型如下所示,我们创建一个类系和一个混合类型实例化一个模板一个模板,从而使得该功能的setName和printNames可用的结构college。
import std.stdio template Department(T, size_t count) { T[count] names void setName(size_t index, T name) { names[index] = name } void printNames() { writeln("The names") foreach (i, name names) { writeln(i," : ", name) } } } struct College { mixin Department!(string, 2) } void main() { auto college = College() college.setName(0, "name1") college.setName(1, "name2") college.printNames() }
当上面的代码被编译并执行,它会产生结果如下:
The names 0 : name1 1 : name2
混入名称空间
混入的名称空间是用来避免在模板中混合类型含糊不清。例如,可以有两个变量,一个在主显式定义,而另一个是混合的。当混合在名称相同的名称是在周边范围内,则认为是在周围范围的名称得到使用。这个例子显示如下。
import std.stdio template Person() { string name void print() { writeln(name) } } void main() { string name mixin Person a name = "name 1" writeln(name) a.name = "name 2" print() }
当上面的代码被编译并执行,它会产生结果如下:
name 1 name 2