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

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

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

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

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

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

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

template <typename T> 
void fun(T a) 
{ 
  cout << "The main template fun(): " << a << endl; 
} 
 
template <>  // 對(duì)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 

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

二、類模板特例化

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

template <typename T> 
class Test{ 
public: 
  void print(){ 
    cout << "General template object" << endl; 
  } 
}; 
 
template<>  // 對(duì)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í)參。我們可以只指定一部分而非所有模板參數(shù),這種叫做類模板的偏特化 或部分特例化(partial specialization)。例如,C++標(biāo)準(zhǔn)庫中的類vector的定義:

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

在vector這個(gè)例子中,一個(gè)參數(shù)被綁定到bool類型,而另一個(gè)參數(shù)仍未綁定需要由用戶指定。注意,一個(gè)類模板的部分特例化版本仍然是一個(gè)模板,因?yàn)槭褂盟鼤r(shí)用戶還必須為那些在特例化版本中未指定的模板參數(shù)提供實(shí)參。

相關(guān)文章

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

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

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

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

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

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

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

    C++中move的使用及說明

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

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

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

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

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)一個(gè)高級(jí)通訊錄的功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    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ù)解決對(duì)話框的多選之DoModal問題

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

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

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

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

    C++中#pragma once與#ifndef對(duì)比分析

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

最新評(píng)論

电白县| 灌阳县| 博乐市| 分宜县| 福州市| 仁寿县| 海城市| 崇礼县| 右玉县| 芮城县| 松桃| 庄浪县| 博乐市| 怀化市| 临城县| 商城县| 武陟县| 莱阳市| 抚松县| 延津县| 新密市| 永和县| 揭阳市| 清水县| 苏尼特右旗| 平陆县| 南开区| 漠河县| 轮台县| 托里县| 新巴尔虎左旗| 鄯善县| 潮州市| 凉城县| 夏邑县| 牡丹江市| 厦门市| 无极县| 彩票| 冀州市| 衡南县|