標.變數
,以變數
為中心,其不是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 ...