模板的泛化,全特化,偏特化

2021-10-19 05:31:51 字數 780 閱讀 6277

首先看泛化

/**

* @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...