函式模板的特化

2021-09-11 00:05:13 字數 929 閱讀 8606

**

#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...