C++模板超詳細(xì)介紹
1.前言
模板是泛型編程的基礎(chǔ),泛型編程即以一種獨(dú)立于任何特定類型的方式編寫代碼。
模板是創(chuàng)建泛型類或函數(shù)的藍(lán)圖或公式。
通常有兩種形式:函數(shù)模板和類模板;
2.函數(shù)模板
函數(shù)模板針對(duì)僅參數(shù)類型不同的函數(shù)
一般形式為:
template <類型形式參數(shù)表> 類型 函數(shù)名( 形式參數(shù)表) { // 函數(shù)的主體 }
函數(shù)調(diào)用實(shí)例:
#include <iostream> #include <string> using namespace std; template <typename T> inline T const& Max(T const& a, T const& b) { return a < b ? b : a; } int main() { int x1 = 114514; int x2 = 121212; cout << "Max: " << Max(x1, x2) << endl;//隱式調(diào)用 int x3 = 114514; int x4 = 'a'; //cout << "Max: " << Max(x3, x4) << endl;//無(wú)法通過編譯 cout << "Max: " << Max<int>(x3, x4) << endl;//顯示調(diào)用 double f1 = 13.5; double f2 = 24.6; cout << "Max: " << Max(f1, f2) << endl; string s1 = "Yuta"; string s2 = "Rokka"; cout << "Max: " << Max(s1, s2) << endl; return 0; }
根據(jù)此樣例我們得注意:
1. 函數(shù)模板分為兩種調(diào)用方式:
顯示模板實(shí)參調(diào)用(顯示調(diào)用),隱式模板實(shí)參調(diào)用(隱式調(diào)用)。
2.隱式調(diào)用不需要顯示給出模板參數(shù),直接經(jīng)過參數(shù)推演進(jìn)行調(diào)用。
3. 顯示調(diào)用則不需要推演直接根據(jù)顯示給出的模板參數(shù)進(jìn)行調(diào)用。
x3和x4因?yàn)轭愋筒煌?,在比較中因?yàn)楹瘮?shù)無(wú)法從這兩個(gè)參數(shù)中進(jìn)行類型推演,所以不能進(jìn)行。
所以一般建議調(diào)用時(shí)采取顯示調(diào)用,便于代碼的理解和維護(hù)。
結(jié)果:
3.類模板
類模板針對(duì)僅數(shù)據(jù)成員和成員函數(shù)類型不同的類。
對(duì)于類模板的使用而言,沒有隱式模板實(shí)參和顯式模板實(shí)參使用的說法,因?yàn)轭惸0宓氖褂帽仨氾@示指明模板實(shí)參。
一般形式為:
template <class type> class 類名 { . . . }
樣例:
#include <iostream> using namespace std; template<typename T> class A { private: T num; public: A() { num = T(6.6667); } void print() { cout << "num:" << num << endl; } }; int main() { A<int> a; //顯示模板實(shí)參的隱式實(shí)例化 a.print(); }
需要注意,此時(shí)我們調(diào)用模板類的時(shí)候,必須是以顯示調(diào)用的方式來進(jìn)行,不然會(huì)經(jīng)典報(bào)錯(cuò)。
解決方法便是顯示給出模板參數(shù) 啦
樣例結(jié)果:
到此這篇關(guān)于C++模板超詳細(xì)介紹的文章就介紹到這了,更多相關(guān)C++模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化
AnimeGAN是是由神經(jīng)網(wǎng)絡(luò)風(fēng)格遷移加生成對(duì)抗網(wǎng)絡(luò)(GAN)而成,它是基于CartoonGAN的改進(jìn),并提出了一個(gè)更加輕量級(jí)的生成器架構(gòu)。本文將介紹如何運(yùn)用AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化,需要的可以參考一下2021-11-11詳解C++設(shè)計(jì)模式編程中對(duì)狀態(tài)模式的運(yùn)用
這篇文章主要介紹了C++設(shè)計(jì)模式編程中對(duì)狀態(tài)模式的運(yùn)用,狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為,對(duì)象看起來似乎修改了它的類,需要的朋友可以參考下2016-03-03C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法時(shí)間空間復(fù)雜度基礎(chǔ)實(shí)踐
這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法中時(shí)間空間復(fù)雜度的基礎(chǔ)實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02詳解C語(yǔ)言如何計(jì)算結(jié)構(gòu)體大小(結(jié)構(gòu)體的內(nèi)存對(duì)齊)
結(jié)構(gòu)體的內(nèi)存對(duì)齊是有關(guān)結(jié)構(gòu)體內(nèi)容的很重要一個(gè)知識(shí)點(diǎn),主要考察方式是計(jì)算結(jié)構(gòu)體的字節(jié)大小,所以本文就給大家詳細(xì)介紹一下C語(yǔ)言如何計(jì)算結(jié)構(gòu)體大小,文中的代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07C++ 內(nèi)聯(lián)函數(shù)inline案例詳解
這篇文章主要介紹了C++ 內(nèi)聯(lián)函數(shù)inline案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01