色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

模板函數(shù)以及模板類的基本概念以及原理

FPGA之家 ? 來(lái)源:嵌入式客棧 ? 作者:嵌入式客棧 ? 2022-07-11 10:42 ? 次閱讀

[導(dǎo)讀] 最近使用C++做些編程,把日常遇到的些比較重要的概念總結(jié)分享一下。本文來(lái)分享一下模板類的原理,以及為什么需要模板類,使用時(shí)的基本要點(diǎn)。

為什么需要模板

比如需要設(shè)計(jì)一個(gè)描述點(diǎn)的類,大致很快可以寫(xiě)成這樣:

classPoint_F
{
public:
/*默認(rèn)傳入參數(shù)為0,0*/
Point_F(floatx0=0,floaty0=0)
:x(x0),y(y0)/*初始化列表*/
{}

/*用const修飾函數(shù),表示函數(shù)不會(huì)修改成員數(shù)據(jù)*/
floatget_x()const{returnx;}
floatget_y()const{returny;}

private:
/*一般會(huì)將數(shù)據(jù)放在私有區(qū),以對(duì)外隱藏*/
floatx;
floaty;
};

可問(wèn)題是,在有的場(chǎng)合這點(diǎn)的坐標(biāo)系有可能不需要浮點(diǎn),比如界面設(shè)計(jì)中點(diǎn)往往是整型表示即可,那此時(shí)就需要再設(shè)計(jì)一個(gè)整型成員類:

classPoint_I
{
public:
/*默認(rèn)傳入?yún)?shù)為0,0*/
Point_f(intx0=0,inty0=0)
:x(x0),y(y0)/*初始化列表*/
{}

/*用const修飾函數(shù),表示函數(shù)不會(huì)修改成員數(shù)據(jù)*/
intget_x()const{returnx;}
intget_y()const{returny;}

private:
/*一般會(huì)將數(shù)據(jù)放在私有區(qū),以對(duì)外隱藏*/
intx;
inty;
};

可是在應(yīng)用代碼中,往往發(fā)現(xiàn)對(duì)于不同數(shù)據(jù)成員的應(yīng)用操作確實(shí)基本類似,而且應(yīng)用代碼往往這兩種(甚至更多成員數(shù)據(jù)類型)都可能會(huì)同時(shí)用到,僅僅因?yàn)閿?shù)據(jù)類型就需要笨笨的將原代碼在改寫(xiě)一下,在現(xiàn)代高級(jí)語(yǔ)言中,這顯然就比較機(jī)械了。

e1d348ce-00c1-11ed-ba43-dac502259ad0.png

C++中有沒(méi)有可能將不同成員數(shù)據(jù)類型但是其頂層邏輯相同的對(duì)象,設(shè)計(jì)為一個(gè)類呢?就比如:

e1e03fb6-00c1-11ed-ba43-dac502259ad0.png

C++模板編程正是為了解決這樣的需求而設(shè)計(jì)的機(jī)制。該機(jī)制允許函數(shù)或類使用泛型類型(generic type)進(jìn)行操作。從而,函數(shù)或類就可以處理許多不同的數(shù)據(jù)類型,而無(wú)需為每種數(shù)據(jù)類型重寫(xiě)相應(yīng)的類或者函數(shù)。

怎么實(shí)現(xiàn)的呢?

這里又可以大致分這樣三種情況:

函數(shù)模板(Function templates)

類模板(Class templates)

**成員模板(Member templates) **

函數(shù)模板

函數(shù)模板其基本語(yǔ)法范式為:

templatefunction_declaration;
templatefunction_declaration;

template 為模板關(guān)鍵字

定義函數(shù)參數(shù)泛型類型或函數(shù)體類變量泛型類型

比如:

#include
usingnamespacestd;

template
Tmax(Ta,Tb)
{
returna>b?a:b;
}

又或者寫(xiě)成如下形式:

#include
usingnamespacestd;

template
Tmax(Ta,Tb)
{
returna>b?a:b;
}

那么或許有的朋友會(huì)任務(wù)關(guān)鍵字class就意味著自定義類,而typename則是基本數(shù)據(jù)類型,比如int,float等,這樣理解其實(shí)是不對(duì)的,從C++編譯器的角度template 與template 其語(yǔ)義是一樣的,都是泛型,用戶在使用這個(gè)模板函數(shù)的時(shí)候,所傳入的參數(shù)都既可以是基本數(shù)據(jù)類型,也可以是類名。

對(duì)于上面的代碼,或許初使用的朋友還會(huì)問(wèn),是不是可以隨便傳入類,這有可能編譯不過(guò)。為什么呢?你傳入的類需要支持>操作符,如果對(duì)于某個(gè)類你想使用該函數(shù),而本身不支持>操作符,則需要實(shí)現(xiàn)>操作符。

類模板

與函數(shù)模板類似,類內(nèi)部成員數(shù)據(jù)或者函數(shù)的參數(shù)或變量會(huì)使用,模板關(guān)鍵字定義的泛型名。比如:

template
classPoint_T
{
public:
Point_T(Tx0=0,Ty0=0)
:x(x0),y(y0)
{}
Tget_x()const{returnx;}
Tget_y()const{returny;}

private:
Tx;
Ty;
};

這小段代碼就回答了之前提出的問(wèn)題,可以支持不同數(shù)據(jù)類型的點(diǎn)。

intmain()
{
Point_Tp1(1,2);
Point_Tp2(1.1f,2.2f);
cout<

以上述簡(jiǎn)單例子看,分別構(gòu)造了整型點(diǎn)p1,以及浮點(diǎn)型點(diǎn)p2,那么究竟怎么做到的呢?為了理解得更清楚,這里將其關(guān)鍵匯編代碼段拷貝下來(lái)簡(jiǎn)要看看:

Point_T   p1(1, 2);
000C1D6C  push        2  
000C1D6E  push        1  
000C1D70  lea         ecx,[p1]  
000C1D73  call        Point_T::Point_T (0C11D1h)  
Point_T p2(1.1f, 2.2f);
000C1D78  push        ecx  
000C1D79  movss       xmm0,dword ptr [__real@400ccccd (0C7B34h)]  
000C1D81  movss       dword ptr [esp],xmm0  
000C1D86  push        ecx  
000C1D87  movss       xmm0,dword ptr [__real@3f8ccccd (0C7B30h)]  
000C1D8F  movss       dword ptr [esp],xmm0  
000C1D94  lea         ecx,[p2]  
000C1D97  call        Point_T::Point_T (0C1064h)

可見(jiàn)編譯器對(duì)不同類型參數(shù)實(shí)際上做了相應(yīng)解析,相當(dāng)于根據(jù)用戶程序傳入的參數(shù)編譯出相應(yīng)的多份代碼。所以可以簡(jiǎn)單理解成編譯器根據(jù)不同泛型實(shí)際參數(shù)類型生成了相應(yīng)的處理代碼。而前面所說(shuō)的模板函數(shù)其原理也基本類似。

總結(jié)一下

通過(guò)些簡(jiǎn)單例子,梳理一下模板函數(shù)以及模板類的基本概念以及原理,理解了這兩個(gè)概念,就比較容易理解成員模板。所謂泛型模板編程,其本質(zhì)是編譯器針對(duì)不同參數(shù)類型解析解析生成相應(yīng)的處理代碼。學(xué)會(huì)使用模板泛型編程你會(huì)發(fā)現(xiàn)你會(huì)少寫(xiě)很多代碼,代碼看起來(lái)會(huì)比較優(yōu)雅,而其實(shí)操作起來(lái)也沒(méi)有想象中那么難。

原文標(biāo)題:什么是函數(shù)模板、類模板?怎么做到的?

文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4345

    瀏覽量

    62870
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73791
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68895
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1642

    瀏覽量

    49238

原文標(biāo)題:什么是函數(shù)模板、類模板?怎么做到的?

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    圖紙模板中的文本變量

    “ ?文本變量和系統(tǒng)自帶的內(nèi)置變量,可以幫助工程師靈活、高效地配置標(biāo)題欄中的信息,而不用擔(dān)心模板中的文字對(duì)象被意外修改。 ? ” 文本變量的語(yǔ)法 文本變量以?${VARIABLENAME}?的方式
    的頭像 發(fā)表于 11-13 18:21 ?212次閱讀
    圖紙<b class='flag-5'>模板</b>中的文本變量

    A0到A4的圖框只要一個(gè)圖紙模板就搞定了?

    非常靈活的管理方式,只需要一個(gè)圖紙模板就可以搞定不同尺寸的場(chǎng)景。 ? ” 圖紙模板的組成 圖紙模板是由以下基本對(duì)象組成的: 直線 矩形 文本(包括普通字符串以及文本變量,或者系統(tǒng)自帶的
    的頭像 發(fā)表于 11-13 18:13 ?549次閱讀
    A0到A4的圖框只要一個(gè)圖紙<b class='flag-5'>模板</b>就搞定了?

    摩爾線程開(kāi)源高性能線性代數(shù)模板庫(kù)MUTLASS

    近日,摩爾線程宣布開(kāi)源高性能線性代數(shù)模板庫(kù)MUTLASS,以便開(kāi)發(fā)者能夠更高效針對(duì)摩爾線程全功能GPU的MUSA Core及Tensor Core等單元進(jìn)行編程,加速基于國(guó)產(chǎn)GPU的算子開(kāi)發(fā)以及算法創(chuàng)新。
    的頭像 發(fā)表于 11-13 11:53 ?369次閱讀

    手寫(xiě)圖像模板匹配算法在OpenCV中的實(shí)現(xiàn)

    OpenCV中的模板匹配是支持基于NCC相似度查找的,但是不是很好用,一個(gè)主要的原因是查找最大閾值,只能匹配一個(gè),自己比對(duì)閾值,又導(dǎo)致無(wú)法正確設(shè)定閾值范圍,所以問(wèn)題很多。于是我重新寫(xiě)了純Python版本的NCC圖像模板匹配的代碼實(shí)現(xiàn)了一個(gè)Python版本的,簡(jiǎn)單易用,支持
    的頭像 發(fā)表于 11-11 10:12 ?308次閱讀
    手寫(xiě)圖像<b class='flag-5'>模板</b>匹配算法在OpenCV中的實(shí)現(xiàn)

    使用C語(yǔ)言實(shí)現(xiàn)函數(shù)模板

      用C語(yǔ)言能不能實(shí)現(xiàn)一個(gè)通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點(diǎn)數(shù)的相加?
    的頭像 發(fā)表于 11-09 11:38 ?443次閱讀

    Linux應(yīng)用編程的基本概念

    Linux應(yīng)用編程涉及到在Linux環(huán)境下開(kāi)發(fā)和運(yùn)行應(yīng)用程序的一系列概念。以下是一些涵蓋Linux應(yīng)用編程的基本概念
    的頭像 發(fā)表于 10-24 17:19 ?273次閱讀

    X電容和Y電容的基本概念

    在電子電路中,電容器是一種至關(guān)重要的元件,它用于儲(chǔ)存電荷并在電路中釋放能量。而在眾多的電容器中,X電容和Y電容作為安規(guī)電容,因其特定的應(yīng)用場(chǎng)景和安全性能而受到廣泛關(guān)注。本文將對(duì)X電容和Y電容的基本概念、工作原理、應(yīng)用場(chǎng)景以及選擇和維護(hù)等方面進(jìn)行詳細(xì)介紹。
    的頭像 發(fā)表于 10-21 16:43 ?2864次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本概念、原理及特點(diǎn)

    基本概念、原理、特點(diǎn)以及在不同領(lǐng)域的應(yīng)用情況。 一、卷積神經(jīng)網(wǎng)絡(luò)的基本概念 卷積神經(jīng)網(wǎng)絡(luò)是一種深度學(xué)習(xí)算法,它由多層卷積層和池化層堆疊而成。卷積層負(fù)責(zé)提取圖像中的局部特征,而池化層則負(fù)責(zé)降低特征的空間維度,同時(shí)增加對(duì)圖像位移的
    的頭像 發(fā)表于 07-11 14:38 ?1212次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本概念和工作原理

    和工作原理,在處理圖像數(shù)據(jù)時(shí)展現(xiàn)出了卓越的性能。本文將從卷積神經(jīng)網(wǎng)絡(luò)的基本概念、結(jié)構(gòu)組成、工作原理以及實(shí)際應(yīng)用等多個(gè)方面進(jìn)行深入解讀。
    的頭像 發(fā)表于 07-02 18:17 ?3994次閱讀

    串口通信的基本概念

    串口通信(Serial Communications)的基本概念可以歸納為以下幾個(gè)方面:
    的頭像 發(fā)表于 06-12 09:28 ?790次閱讀
    串口通信的<b class='flag-5'>基本概念</b>

    d放大器和ab區(qū)別在哪

    d放大器和ab區(qū)別在哪 在撰寫(xiě)一篇關(guān)于D放大器和AB放大器區(qū)別的詳盡、詳實(shí)、細(xì)致的文章之前,我們首先需要了解這兩種放大器的基本概念
    的頭像 發(fā)表于 06-10 15:48 ?840次閱讀

    CW32F003E4芯片入門(mén)學(xué)習(xí):4.工程模板創(chuàng)建(使用例程或模板)

    模板路徑:CW32F003_StandardPeripheralLib_V1.4ExamplesTemplate
    的頭像 發(fā)表于 04-24 14:14 ?429次閱讀
    CW32F003E4芯片入門(mén)學(xué)習(xí):4.工程<b class='flag-5'>模板</b>創(chuàng)建(使用例程或<b class='flag-5'>模板</b>)

    Altium Designer與Gerber模板的導(dǎo)入指南

    我們?cè)谠O(shè)計(jì)完成后,準(zhǔn)備輸出Gerber的時(shí)候,有時(shí)候想用自己的Gerber模板導(dǎo)入PCB進(jìn)行編輯,那么是如何設(shè)置導(dǎo)入的呢?
    的頭像 發(fā)表于 03-28 09:41 ?1471次閱讀
    Altium Designer與Gerber<b class='flag-5'>模板</b>的導(dǎo)入指南

    CW32F003E4芯片入門(mén)學(xué)習(xí):4.工程模板創(chuàng)建(使用例程或模板)

    1.3.1拷貝模板工程和庫(kù)文件 模板路徑:CW32F003_StandardPeripheralLib_V1.4ExamplesTemplate 庫(kù)文件路徑
    的頭像 發(fā)表于 03-27 09:39 ?527次閱讀
    CW32F003E4芯片入門(mén)學(xué)習(xí):4.工程<b class='flag-5'>模板</b>創(chuàng)建(使用例程或<b class='flag-5'>模板</b>)

    LabVIEW模板匹配位置信息導(dǎo)出

    大家好,我在利用ni vision assistant生成的模板匹配界面時(shí),想要將每一個(gè)匹配物體的位置信息導(dǎo)出到word或者Excel,但是他這個(gè)匹配個(gè)數(shù)不確定,怎么樣把匹配到的所有物體信息導(dǎo)出呀?利用哪些編程?謝謝大家了
    發(fā)表于 03-11 20:22
    主站蜘蛛池模板: 久久精品一本到东京热 | 99热视频这里只有久久精品 | 最近中文字幕高清中文字幕MV | 国产一区日韩二区欧美三区 | 伦理片2499电影伦理片 | 日日噜噜噜夜夜爽爽狠狠 | jizz国产丝袜18老师美女 | 韩国精品韩国专区久久 | 乱码AV午夜噜噜噜噜 | 国产色综合色产在线视频 | 99精品久久精品一区二区 | 久久这里只有精品国产精品99 | 免费播放美女一级毛片 | 国产亚洲精品AAAAAAA片 | 日本高清免费一本在线观看 | 国产一区二区内射最近更新 | 亚洲AV國產国产久青草 | 日本高清二区 | 97在线视频免费人妻 | 解开白丝老师的短裙猛烈进入 | 亚洲精品国偷拍自产在线 | 亚洲毛片网 | 精子pk美女| 亚洲黄色免费在线观看 | 91亚洲 欧美 国产 制服 动漫 | 亚洲中字慕日产2020 | 国产99视频精品一区 | 伊人大香线蕉精品在线播放 | 中文无码不卡的岛国片国产片 | 超清无码波多野吉衣与黑人 | 日韩亚洲欧洲在线rrrr片 | 日韩亚洲国产中文字幕欧美 | 7723日本高清完整版在线观看 | 亚洲欧美人成视频在线 | 强开乳罩摸双乳吃奶视频 | 欧美日韩中文国产一区发布 | 天天操人人射 | 成年女人免费播放影院 | 97成人精品视频在线播放 | 免费精品国产日韩热久久 | 国产深夜福利视频在线 |