d中變數很酷

2021-10-12 06:47:31 字數 3975 閱讀 1931

標.變數,以變數為中心,其不是c++的變數,而是可包含任意型別值型別安全容器.其也知道包含的值的型別,c++卻用變數這個名字來實現聚集(並)型別.

匯入 標.變數;

變數 a;

a=42;

斷定(a.型別==具型(整));

a+=1

; 斷定(a==43)

; 浮 f=a.取!浮;

//轉為浮

斷定(f==43)

; a/=2

; f/=2

; 斷定(a==

21&&f==

21.5);

a="[!串000]"

; 斷定(a.型別==具型(串));

變數 b=新 物件();

變數 c=b;

斷定(c 是 b)

;//bc指向相同

b/=2

;//不匹配,錯誤

標.變數也提供了並型別,代數.另乙個是元組.代數編譯時特定型別列表.與變數差不多.

如果型別不匹配,會報編譯錯誤.像這樣:

別名 無效=的型(無效)

;//[!注釋003]

別名 選項(t)

=代數!

(t,無效)

; 選項!大小型 的索引(整[

]乾草堆,整 針頭)

整[]a=[4,

2,210,42,

7]; 選項!大小型 索引=a.的索引(42)

;//統調,

斷定(!索引.偷看!無效)

;//斷定沒有

斷定(索引==大小型(3)

);選項!大小型 索引2

=a.的索引(

117)

; 斷定(索引2.偷看!無效)

;

偷看函式,把變數作為執行時引數,t作為編譯時引數.僅當變數t型別時,返回變數的值的指標,否則返回無效針.

d變數也能訪問代數上函式.允許當為適當型別,則執行相應型別函式.

總結:1,標.變數.變數等價於標::任何,型別安全的可包含任何值的型別.

2,標.變數.代數等價於標::變數,即並型別,是個限制型別變數簡單包裝.

3,標.變數標::訪問一樣,提供訪問函式來分發處理函式.

現在來說c++訪問的問題.並看看d編譯時自省和生成**的厲害.

c++問題:模板難看,元程式設計麻煩,工具少,實現訪問者很難.用λ函式:

元《類.

..fs>

構 過載;

元《類 f0,類.

..o>

構 過載>

:f0,過載>

用 f0::符號();

用 過載>

::符號();

};元《類 f0>

構 過載

:f0

用 f0::符號();

};元《類.

..fs>

動 造訪問者(fs.

..fs)

c++17可簡化為:

元《類.

..ts>構 過載:ts...

; 元《類.

..ts>過載(ts...

)->過載>

; 元《類.

..fs>

動 造訪問者(fs.

..fs)

來自參考示例,如何極致的使用訪問:

元《類.

..ts>構 過載:ts...

; 元《類.

..ts>過載(ts...

)->過載>

; 用 變數型=變數《整,長,雙精,串》

; 向量《變數型》向量=

; 對(動&v:向量),[

](雙精 參),[

](常 串&參),}

,v);

}

d可以幹得更好.實現造訪問者.

匯入 標.特徵:形參;

構 變數訪問者(函式...

) 靜 每一(i,函式;函式)

//不同函式,不同過載

動 呼叫操作(形參!函式 形參)

}動 造訪問者(函式...

)(函式 fs)

就完了,你服不服?.僅接收閉包/函式.基於簽名來分發函式.

d反樣板語言,都是直接解決問題,訪問以編譯時函式列表為引數,不必建立新,並寫造訪問者之類.

d更少選擇,但更快,更安全,更輕鬆.用標.變數.訪問,直接:

代數!

(串,整,極)v=

"[!串001]"

; v.訪問!

((串 s)

=>寫行(

"[!串002]"

,s),

(整 n)

=>寫行(

"[!串003]"

,n),

(極 b)

=>寫行(

"[!串004]"

,b),

);

比較c++:

元《類.

..ts>構 過載:ts...

; 元《類.

..ts>過載(ts...

)->過載>

; 變數《串,整,極》v=

"[!串005]"

; 訪問(過載,[

](整 n),[

](極 b)

},v)

;

d看起來與內建模式匹配語法類似.很強大.可讀性:

//[!注釋007]

v.訪問!

((參)

異 靜 如(是(t==整)

) 異 靜 如(是(t==極))}

);

對比c++版,

vs.

//c++

訪問((動&參)

異 如 常式(是相同值) 異 如 常式(是相同值,v);

你選哪個?

C99中很酷的C語言技巧

c語言常常讓人覺得它所能表達的東西非常有限。它不具有類似第一級函式和模式匹配這樣的高階功能。但是c非常簡單,並且仍然有一些非常有用的語法技巧和功能,只是沒有多少人知道罷了。指定的初始化 很多人都知道像這樣來靜態地初始化陣列 intfibs c99標準實際上支援一種更為直觀簡單的方式來初始化各種不同的...

D3D中的渲染

虛擬世界中渲染幾何體一般來說有三種途徑 自定義座標渲染 d3dx內建模型渲染和外部模型資料渲染。第一步 定義頂點資料結構體 d3d提供了自定義頂點結構的機制,通過自定乙個結構體,來儲存我們所希望具有的頂點資料,例如 stuct colorvertex 頂點結構體定義好之後,需要用靈活頂點格式標記的組...

D 語言的變數生命週期

對於編寫應用的 c 程式設計師,生命週期 lifecycle 恐怕是所有需要注意的事項裡面最討厭,最容易導致錯誤,而且出錯後後果最嚴重的乙個了。d 作為 c 的改進者,在生命週期上有了不少改進,不幸的是其中一些改進可能是違反 c 程式設計師直覺的,下面列出一些常見差異。struct 和 class ...