- D 程式設計基礎
- D 程式設計 - 首頁
- D 程式設計 - 概述
- D 程式設計 - 環境
- D 程式設計 - 基本語法
- D 程式設計 - 變數
- D 程式設計 - 資料型別
- D 程式設計 - 列舉
- D 程式設計 - 字面量
- D 程式設計 - 運算子
- D 程式設計 - 迴圈
- D 程式設計 - 條件語句
- D 程式設計 - 函式
- D 程式設計 - 字元
- D 程式設計 - 字串
- D 程式設計 - 陣列
- D 程式設計 - 關聯陣列
- D 程式設計 - 指標
- D 程式設計 - 元組
- D 程式設計 - 結構體
- D 程式設計 - 聯合體
- D 程式設計 - 範圍
- D 程式設計 - 別名
- D 程式設計 - Mixin
- D 程式設計 - 模組
- D 程式設計 - 模板
- D 程式設計 - 不可變物件
- D 程式設計 - 檔案 I/O
- D 程式設計 - 併發
- D 程式設計 - 異常處理
- D 程式設計 - 合約
- D - 條件編譯
- D 程式設計 - 面向物件
- D 程式設計 - 類與物件
- D 程式設計 - 繼承
- D 程式設計 - 過載
- D 程式設計 - 封裝
- D 程式設計 - 介面
- D 程式設計 - 抽象類
- D 程式設計 - 有用資源
- D 程式設計 - 快速指南
- D 程式設計 - 有用資源
- D 程式設計 - 討論
D 程式設計 - Mixin
Mixin 是允許將生成的程式碼混合到原始碼中的結構體。Mixin 可以是以下型別:
- 字串 Mixin
- 模板 Mixin
- Mixin 名稱空間
字串 Mixin
D 具有在編譯時插入字串程式碼的能力,只要該字串在編譯時已知。字串 Mixin 的語法如下所示:
mixin (compile_time_generated_string)
示例
下面顯示了一個字串 Mixin 的簡單示例。
import std.stdio;
void main() {
mixin(`writeln("Hello World!");`);
}
編譯並執行上述程式碼後,將產生以下結果:
Hello World!
這是另一個示例,我們可以在編譯時傳遞字串,以便 Mixin 可以使用函式重用程式碼。如下所示。
import std.stdio;
string print(string s) {
return `writeln("` ~ s ~ `");`;
}
void main() {
mixin (print("str1"));
mixin (print("str2"));
}
編譯並執行上述程式碼後,將產生以下結果:
str1 str2
模板 Mixin
D 模板定義了通用的程式碼模式,編譯器可以根據該模式生成實際的例項。模板可以生成函式、結構體、聯合體、類、介面以及任何其他合法的 D 程式碼。模板 Mixin 的語法如下所示。
mixin a_template!(template_parameters)
下面顯示了一個字串 Mixin 的簡單示例,我們使用類 Department 建立一個模板,並使用一個 Mixin 例項化該模板,從而使函式 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
Mixin 名稱空間
Mixin 名稱空間用於避免模板 Mixin 中的歧義。例如,可能存在兩個變數,一個在 main 中顯式定義,另一個是混合的。當混合的名稱與周圍作用域中的名稱相同時,將使用周圍作用域中的名稱。此示例如下所示。
示例
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
廣告