3. c++ type traits
一直比較奇怪這個是幹什麼的,現在總算略知皮毛。現在就讀陳崴先生翻譯的 和 john maddock and steve cleary 的 c++ type traits 做點筆記。
「總有一些時候,泛型不夠好 ─ 有時候是因為不同的型別差距過大,難以產生一致的泛化實作版本。」
也就是在這種時候,我們要對泛型做一些縫縫補補的工作。
traits 就是 「把一系列與型別相關的性質包裹於單一 class 之內」
「所謂特性(trait)指的是,舉個例子,某型別是否為乙個 pointer,或是乙個 reference?某型別是否擁有乙個 trivial constructor,或是擁有乙個 const 修飾詞? 這些 type-traits classes 共同享有一致性的設計:每乙個 class 都有乙個 member value,那是乙個編譯期常數,如果某型別擁有某種特性,此一常數的值就是 true,否則就是 false。」
traits實現這個member value的時候常常用到前面折騰了我一陣的特化,先提供乙個標準的主機板本的template class ,然後針對那些不好處理的做特化版本。
c++ boost中的type-traits library 是traits最典型的例子
最簡單的例子
is_void有乙個 member value,如果 t 是 void,它就是 true。
templatestruct is_void
;template <>
struct is_void
;
這裡是利用全特化來設計的,內部沒有實際用到模板引數,看上去有點傻,呵呵。
還有乙個例子是class boost::is_pointer
templatestruct is_pointer
;template
struct is_pointer
;
再摘錄一段有用的:
偏特化的語法帶了點不可思議的味道,而且一談到它很容易就耗掉一整篇文章。就像全特化的情形一樣,為了針對某個 class 寫出乙個偏特化版本,你首先必須宣告 template 主版本。偏特化版本在 class 名稱之後多出乙個 <┅> ,其中內含偏特化叄數;這些叄數定義出「將被繫結於偏特化版」的某些型別。究竟什麼叄數會(或說能夠)出現於偏特化版本之中,規則頗為曲折,以下是乙個簡略的規則。如果你能夠以此型式合法寫出兩個多載化函式:那麼你就能夠以此型式寫出乙個偏特化版本:void foo(t);
void foo(u);
template這個簡則並非絕對成立,但它非常簡單,足以讓你牢牢記住並足夠接近精確的規則。class c;
template
class c;
這幾天用template的鬱悶和自己的無知(1)
想做乙個自己的元胞自動機模板庫,結果就把自己搞暈了 1.template template parameters 想在模板類中封裝乙個容器,容器的型別可以由使用者指定,容器中元素的型別也可以由使用者指定。於是想當然而 template class cellcontainer containertyp...
這幾天用多執行緒
系統正式開發有大半個月了,由於有非常多的loader需要同時執行,所以選擇多執行緒來實現。伺服程序m首先建立若干個s程序 如果有服務請求到達,m建立服務執行緒e。e和s之間用fifo用以傳遞資料。當有資料到達之後,e通過fifo傳給s,s啟動乙個執行緒loader loader和s之間也是fifo ...
這幾天用linux的體驗
買了張16gb的u盤。每天就不厭其煩的拼命往上面裝各種發行版的linux作業系統的live版本。先用unetbootin把映象寫進去以後,再開機去開啟那個live版的系統,再把它裝在硬碟上面 硬碟已經被我清空了一部分的 第乙個發行版是backtrack5 r2 gnome,這是我用的最久也是最舒服的...