語言/CPP {is_integral,conditional}
is_integral
性質
bool/char/...
都是屬於整型;
@DELI;
你可能寫成bool ret = is_integral<bool>::value;
然後你會認為is_integer
是運行時計算的, 這是錯誤的!
is_integral
他不是個函數 他是類 而且value
他是constexpr
的, 他是在預編譯期間就完全工作了, 換句話說 你預編譯結束後 得到的是:bool ret = true;
!
.
有關類型的操作 都是預編譯期間就完成了;
conditional
性質
看一個需求: using T = ?; using ANS = int/double;
如果T
是整型類型 則我們令ANS=int
, 否則讓ANS=double
, 這要怎麼實現呢?
這就是conditional
的做法: using ANS = conditional< is_integer<T>::value, int, double>::value
; 即conditional< bool A, class B, class C>
(注意類模板的A
必須是constexpr
類型的參數 才能放進去), 如果A=true
則結果為B
否則結果為C
;