C 型別萃取及模板偏特化

2021-08-19 14:29:28 字數 653 閱讀 4525

1. 型別萃取的作用

型別萃取使用模板技術來萃取型別(包含自定義型別和內建型別)的某些特性,用以判斷該型別是否含有某些特性,從而在泛型演算法中來對該型別進行特殊的處理用來提高效率或者其他。例如:在stl中的destory演算法根據函式的引數型別的特性:是否有trivial destructor來選擇對應的策略來進行destory,如果為內建型別,則不呼叫該型別的destructor,否則對迭代器範圍內的物件呼叫destructor來進行destory。

template inline void destory(forwarditerator first, forwarditerator last)

template inline void __destory(forwarditerator first, forwarditerator last, t* )

template inline void __destory_aux(forwarditerator first, forearditerator last, __false_type);

template inline void __destory_aux(forwarditerator first, forearditerator last, __true_type);

C 模版全特化 偏特化 型別萃取

什麼是特化?沒有特化的c 模版中,不管傳入引數是什麼型別,都是一樣的處理方式。但是當我們需要針對某個特定的型別做特殊的處理的時候,這個時候就需要用到特化了。全特化 我們可以將某乙個類或某乙個函式單獨拿出來特化。舉個例子 template class t class vector private si...

C 模板特化和型別萃取

模板特化類似於函式過載,而且都是編譯鏈結時確定,而非執行時確定的 特化。specialize 就是讓模板引數t在某個具體型別時,可以特殊處理。特化的模板宣告,前面一般是template 要求函式對數值型別的引數比較大小,對string型別的引數,比較字串的長度 函式模板 template typen...

C 模板總結 模板特化與型別萃取

在原模板的基礎上對特殊型別進行特殊化。分為函式模板特化和類模板特化。特化步驟 前提要有乙個基礎的函式模板 後加 2.函式名後加 指定type 3.形參表要和基礎型別一樣 基礎模板 templatebool isequal t left,t right void test1 特化 template b...