**
#include
#include
using namespace std;
//泛型版本
template int compare(const t &v1, const t &v2)
//為實參型別 const char * 提供特化版本
//template <> int compare(const char * const &v1, const char * const &v2) //省略了函式名後邊的顯示模板實參,因為可以從函式形參表推斷出來,本定義與下邊的定義都是正確的;
template <> int compare(const char * const &v1, const char * const &v2)
//為實參型別 char * 提供特化版本
//template <> int compare(char * const &v1, char * const &v2)
template <> int compare(char * const &v1, char * const &v2)
int main()
; //乙個普通字元陣列,不是指標,形參為引用時,陣列大小成為形參的一部分,陣列不轉換為指標,型別不匹配;
const char b = ; //乙個常量字元陣列,不是指標,型別不匹配;
std::cout << compare(a, b) << std::endl;
}return 0;
//char * 與 const char * 是兩個不同的資料型別(前者儲存的資料是常量與後者儲存的資料是非常量),雖然可以將型別 char * 通過常規轉換,轉換成 const char *,但是作為模板實參,在模板實參推斷時,不會把函式呼叫時的實參型別 char * 轉換為模板形參型別const char *,所以必須提供兩個特化版本。
}
函式模板的特化
函式模板的特化 該定義中乙個或多個模板形參的實際型別或實際值是指定的。特化形式如下 關鍵字template後面接一對空的尖括號 再接模板名和一對尖括號,及括號中指定這個特化定義的模板形參 函式形參表 函式體 template int compare const char const v1,const...
函式模板「偏特化」 (C )
模板是c 中很重要的乙個特性,利用模板可以編寫出型別無關的通用 極大的減少了 量,提公升工作效率。c 中包含類模板 函式模板,對於需要特殊處理的型別,可以通過特化的方式來實現特定型別的特殊操作。最近工作中,需要處理cont這種復合型別和t這種自定義型別的模板特化,因為cont型別有五種左右需要特殊處...
C 類模板 函式模板全特化 偏特化的使用
一 類模板全特化 偏特化 pragma once include程式設計客棧 include template class tc void funtest template class tc void funtest template void tc funtest main.cpp include...