首先看泛化
/**
* @brief 型別轉換模板類(f 源型別, t 目標型別)
*/template
<
classf,
class
t>
class
lexicalcast
};
這是乙個仿函式的寫法,類的物件可以向函式一樣使用,傳入源型別就返回目標型別,不管源型別和目標型別是什麼樣的,這就是泛化。
再看偏特化
/**
* @brief 型別轉換模板類片特化(yaml string 轉換成 std::vector)
*/template
<
class
t>
class
lexicalcast
>
return vec;}}
;
這裡類就是上乙個類的偏特化,兩個泛型引數變成乙個泛型引數了,為什麼要這樣,因為boost::lexical_cast(v);並不能轉換所有的型別,而且可能當泛型引數符合這種形式的時候,我們想做一些特殊的處理,這時候編譯器首先就會找到偏特化的版本,如果沒有偏特化的版本就使用泛化的處理。
再看特化
template
<
>
class
lexicalcast
};
特化就是所有的模板引數的型別都被確定了,那麼如果使用的時候模板引數和特化版一樣就先使用特化版的。 模板的偏特化,全特化
c 中的模板分為類模板和函式模板 模板的特化分為倆種 全特化和偏特化 全特化 舉乙個簡單的例子 可以發現,ab呼叫的是我們全特化後的版本,而aa呼叫的是原始版本。偏特化 偏特化又稱為區域性特化,全特化是對所有的模板引數進行特化,偏特化是對區域性的引數特化 乙個簡單的例子 templateclass ...
C 模板全特化 偏特化
大家都對c 的模板程式設計應該都能很熟練使用了,下面就是一段很簡單不過的例子了 模板函式 templatevoid func t num1,n num2 cout num1 num1 num2 num2 static bool comp t num1,n num2 return num1 特化其實就...
模板的全特化與偏特化
模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。模板分為類模板與函式模板,特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有多個型別,那麼只限定其中的一部分。先看類模板 cpp view plain copy temp...