最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++模板特例化應(yīng)用實例

 更新時間:2014年08月15日 09:25:10   投稿:shichen2014  
這篇文章主要介紹了C++模板特例化應(yīng)用實例,是非常重要的一個概念,需要的朋友可以參考下

模板特例化是C++程序設(shè)計中一個非常重要的應(yīng)用,本文就以實例形式對其進(jìn)行分析,相信對大家進(jìn)一步理解C++程序設(shè)計能夠帶來一定的幫助。具體內(nèi)容如下:

首先,模板是C++中一個很重要的特性,寫一份代碼能用于多種數(shù)據(jù)類型(包括用戶自定義類型)。例如,STL的sort()函數(shù)可以用于多種數(shù)據(jù)類型的排序,類stack可以用作多種數(shù)據(jù)類型的棧。但是,如果我們想對特定的數(shù)據(jù)類型執(zhí)行不同的代碼(而不是通用模板)呢?這種情況下就可以使用模板特例化(template specialization)。

一、函數(shù)模板特例化

當(dāng)特例化一個函數(shù)模板時,必須為原模板中的每個模板參數(shù)都提供實參。使用關(guān)鍵字template后跟一個空尖括號<>,即template <>,以指出我們正在特例化一個模板。

template <typename T> 
void fun(T a) 
{ 
  cout << "The main template fun(): " << a << endl; 
} 
 
template <>  // 對int型特例化 
void fun(int a) 
{ 
  cout << "Specialized template for int type: " << a << endl; 
} 
 
int main() 
{ 
  fun<char>('a'); 
  fun<int>(10); 
  fun<float>(9.15); 
  return 0; 
} 

輸出結(jié)果:

The main template fun(): a 
Specialized template for int type: 10 
The main template fun(): 9.15 

對于除int型外的其他數(shù)據(jù)類型,都會調(diào)用通用版本的函數(shù)模板fun(T a);對于int型,則會調(diào)用特例化版本的fun(int a)。注意,一個特例化版本的本質(zhì)是一個實例,而非函數(shù)的重載。因此,特例化不影響函數(shù)匹配。

二、類模板特例化

除了特例化函數(shù)模板,我們還可以特例化類模板。下面是一個簡單的例子:

template <typename T> 
class Test{ 
public: 
  void print(){ 
    cout << "General template object" << endl; 
  } 
}; 
 
template<>  // 對int型特例化 
class Test<int>{ 
public: 
  void print(){ 
    cout << "Specialized template object" << endl; 
  } 
}; 
 
int main() 
{ 
  Test<int> a; 
  Test<char> b; 
  Test<float> c; 
  a.print(); 
  b.print(); 
  c.print(); 
  return 0; 
}

輸出結(jié)果:

Specialized template object 
General template object 
General template object

另外,與函數(shù)模板不同,類模板的特例化不必為所有模板參數(shù)提供實參。我們可以只指定一部分而非所有模板參數(shù),這種叫做類模板的偏特化 或部分特例化(partial specialization)。例如,C++標(biāo)準(zhǔn)庫中的類vector的定義:

template <typename T, typename Allocator> 
class vector 
{ 
  /*......*/ 
}; 
 
// 部分特例化 
template <typename Allocator> 
class vector<bool, Allocator> 
{ 
  /*......*/ 
};

在vector這個例子中,一個參數(shù)被綁定到bool類型,而另一個參數(shù)仍未綁定需要由用戶指定。注意,一個類模板的部分特例化版本仍然是一個模板,因為使用它時用戶還必須為那些在特例化版本中未指定的模板參數(shù)提供實參。

相關(guān)文章

  • C++ 花括號{}初始化小結(jié)

    C++ 花括號{}初始化小結(jié)

    在C++11及以后的版本中,花括號{}語法在不同語境下有不同的用法,本文就詳細(xì)的介紹C++ 花括號{}初始化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • c++面試題字符串拷貝函數(shù)示例

    c++面試題字符串拷貝函數(shù)示例

    這個也算是企業(yè)招工里面比較常見的一道筆試面試題了,非常簡單。個人覺得考的主要是對指針使用的熟練程度,還有對字符串類內(nèi)部原理的掌握程度
    2013-12-12
  • C語言超全面define預(yù)處理指令的使用說明

    C語言超全面define預(yù)處理指令的使用說明

    C語言里可以用#define定義一個標(biāo)識符來表示一個常量。特點是:定義的標(biāo)識符不占內(nèi)存,只是一個臨時的符號,預(yù)編譯后這個符號就不存在了,也不做類型定義。預(yù)編譯又叫預(yù)處理
    2022-04-04
  • C++中move的使用及說明

    C++中move的使用及說明

    這篇文章主要介紹了C++中move的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • ubuntu 下編譯C++代碼出現(xiàn)的問題解決

    ubuntu 下編譯C++代碼出現(xiàn)的問題解決

    這篇文章主要介紹了ubuntu 下編譯C++代碼出現(xiàn)的問題解決的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • 基于C語言實現(xiàn)高級通訊錄的示例代碼

    基于C語言實現(xiàn)高級通訊錄的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實現(xiàn)一個高級通訊錄的功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的小伙伴可以參考一下
    2023-01-01
  • C++中的opeartor?new和placement?new使用步驟

    C++中的opeartor?new和placement?new使用步驟

    這篇文章主要介紹了C++中的opeartor?new和placement?new詳解,在很多情況下,placement?new的使用方法和其他普通的new有所不同。這里提供了它的使用步驟,需要的朋友可以參考下
    2022-10-10
  • CFileDialog的鉤子函數(shù)解決對話框的多選之DoModal問題

    CFileDialog的鉤子函數(shù)解決對話框的多選之DoModal問題

    前幾天領(lǐng)導(dǎo)問我一個問題:就是使用CFileDialog類在設(shè)置多選時選中的文件所放的文件緩沖區(qū)不知設(shè)置多大合適,本文將詳細(xì)介紹,需要的朋友可以參考下
    2012-12-12
  • C語言實現(xiàn)頁面置換算法(FIFO、LRU)

    C語言實現(xiàn)頁面置換算法(FIFO、LRU)

    這篇文章主要介紹了通過C語言實現(xiàn)的兩種頁面置換算法:先進(jìn)先出(FIFO)頁面置換算法和最近最久未使用(LRU)頁面置換算法。文中的代碼具有一定的學(xué)習(xí)或工作價值,快來跟隨小編學(xué)習(xí)一下吧
    2021-12-12
  • C++中#pragma once與#ifndef對比分析

    C++中#pragma once與#ifndef對比分析

    當(dāng)我們編寫C++代碼時,經(jīng)常需要使用頭文件來引入一些常用的函數(shù)、類或者變量,如果一個頭文件被重復(fù)包含,就會導(dǎo)致編譯錯誤或者運行時錯,為了避免發(fā)生,我們需要使用預(yù)處理指令來防止頭文件被重復(fù)包含,常用的預(yù)處理指令有#pragma once和#ifndef,需要的朋友可以參考下
    2023-05-05

最新評論

华蓥市| 鸡泽县| 杂多县| 石门县| 枝江市| 博野县| 宜黄县| 牙克石市| 富宁县| 巴楚县| 嘉定区| 泾川县| 彰化市| 阳江市| 陕西省| 公安县| 庆云县| 来安县| 大洼县| 荆州市| 陈巴尔虎旗| 滦平县| 高雄县| 长垣县| 虹口区| 工布江达县| 区。| 苍溪县| 万荣县| 克拉玛依市| 石棉县| 温州市| 乐亭县| 瑞昌市| 陵水| 稷山县| 文登市| 巧家县| 吉水县| 杭锦旗| 永春县|