模板可以生成函式,結構,聯,類,介面和任何其他合法的d**
.
模板外掛程式
插入模板例項,如下:
mixin a_template!
(template_parameters)
//mixin template
edgearrayfeature
(t, size_t count)
void
printedges()
writeln()
;}}
然後將外掛程式例項化至放外掛程式的地方.
mixin edgearrayfeature!
(int,2
);//這樣,在此插入.
//或這樣
struct line
或這樣
struct point
void
main()
模板外掛程式必須用本地匯入
,避免在匯入點,找不到模組.
module a;
mixin template
a(t)
}
找到自己的型別this
.
mixin template
mymixin
(t)}
struct mystruct
void
main()
除了外掛程式模板
,還有外掛程式串
,d又乙個非常強大的特徵.
mixin(compile_time_generated_string)
import std.stdio;
void
main()
厲害在於,**是編譯時生成.
import std.stdio;
string printstatement
(string message)
void
main()
外掛程式名字歧義:
import std.stdio;
template
templ()
}void
main()
多外掛程式名衝突,解決:
mixin templ a;
// defines a.i
mixin templ b;
// defines b.i
//再定義乙個名字.
a.i =
42;
串外掛程式沒有名字空間.
void
main()
一種簡單消歧方法,把串外掛程式
搞成模板外掛程式
,然後消歧:
template
templatize
(string str)
void
main()
串外掛程式
在操作符過載時,很有用.操作符過載定義為模板也是為了方便生成**.
串外掛程式
用在析構器中:
import std.stdio;
mixin template
foo()}
mixin template
bar()}
struct s
mixin foo;
mixin bar;
}void
main()
析構順序與外掛程式呼叫順序相反.
這種方式允許插入不同的資源至乙個型別,資源自己在不同外掛程式模板元中清理自己.然後使用者呼叫相應析構外掛程式.
由於寫本書時的漏洞,析構器目前不能這樣.但當前(2020)不確定.
此外,串外掛程式的析構器確實與型別析構器衝突了.
int
filter
(string predicate)
(in int
numbers)
}return result;
}
上面的可以用λ
來寫,更方便.在沒有λ
時很流行.
這樣使用:
int
numbers =[1
,8,6
,-2,
10];int
chosen = filter!
"number < 7"
(numbers)
;
是不是,太暴力了.且名字必須匹配. 05用d程式設計切片
切片,動態陣列的別名.起.尾 是這樣的 即左包右不包 切片不是實體,就像鑰匙一樣.如果切片修改實體,則實體也跟著變了.a.a 大小為0,a.表示陣列長度,等價於陣列.長度.dup複製實體.如下 import std.stdio void main 賦值 int 3 a 1 1,1 int 3 b 2...
06用d程式設計 串
最簡單定義 char是串,字元陣列 d有三種陣列型別.import std.stdio void main 用 c z 可以看到結果,否則 回車 沒用.readf不適合讀串,讀符就差不多了.readln適合讀串,就不需要 s及 運算子了.如下 import std.stdio void main 可...
08用d程式設計域
不能在內部域中定義與外部域中相同的名字.有的在域的最前定義變數 一般在使用前定義變數,而不是在之後.找不到,也不規範 最好在剛要使用前定義,在速度,不犯錯,可讀,維護上都不錯.import std.stdio void main i 10 i 在 中宣告多種型別變數 d官方程式設計風格 三元符.三個...