欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

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

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

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

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

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)。注意,一個(gè)特例化版本的本質(zhì)是一個(gè)實(shí)例,而非函數(shù)的重載。因此,特例化不影響函數(shù)匹配。

二、類模板特例化

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

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í)參。我們可以只指定一部分而非所有模板參數(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í)參

上一篇:Linux網(wǎng)絡(luò)編程之UDP Socket程序示例

欄    目:C語言

下一篇:C++變位詞問題分析

本文標(biāo)題:C++模板特例化應(yīng)用實(shí)例

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3497.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有