48用d程式設計外掛程式

2021-10-03 09:17:57 字數 2464 閱讀 5594

模板可以生成函式,結構,聯,類,介面和任何其他合法的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官方程式設計風格 三元符.三個...