91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

FPGA之家 ? 來源:嵌入式客棧 ? 作者:嵌入式客棧 ? 2022-07-11 10:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

為什么需要模板

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

classPoint_F
{
public:
/*默認(rèn)傳入?yú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;
};

可問題是,在有的場(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àn)代高級(jí)語言中,這顯然就比較機(jī)械了。

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

C++中有沒有可能將不同成員數(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ù)類型,而無需為每種數(shù)據(jù)類型重寫相應(yīng)的類或者函數(shù)。

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

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

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

類模板(Class templates)

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

函數(shù)模板

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

templatefunction_declaration;
templatefunction_declaration;

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

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

比如:

#include
usingnamespacestd;

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

又或者寫成如下形式:

#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 其語義是一樣的,都是泛型,用戶在使用這個(gè)模板函數(shù)的時(shí)候,所傳入的參數(shù)都既可以是基本數(shù)據(jù)類型,也可以是類名。

對(duì)于上面的代碼,或許初使用的朋友還會(huì)問,是不是可以隨便傳入類,這有可能編譯不過。為什么呢?你傳入的類需要支持>操作符,如果對(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;
};

這小段代碼就回答了之前提出的問題,可以支持不同數(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)鍵匯編代碼段拷貝下來簡(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)

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

總結(jié)一下

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

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

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

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

    關(guān)注

    3

    文章

    4417

    瀏覽量

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

    關(guān)注

    22

    文章

    2123

    瀏覽量

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

    關(guān)注

    30

    文章

    4967

    瀏覽量

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

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51592

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Helm包管理與模板化部署實(shí)戰(zhàn)

    直接用kubectl管理K8s資源,10個(gè)微服務(wù)就要維護(hù)幾十個(gè)YAML文件,版本管理靠文件夾命名,回滾靠手動(dòng)替換文件。Helm把一組相關(guān)的K8s資源打包成Chart,支持模板化、版本管理、一鍵部署和回滾,是K8s生態(tài)中事實(shí)上的包管理標(biāo)準(zhǔn)。
    的頭像 發(fā)表于 02-26 16:37 ?192次閱讀

    瑞薩RA-Eco-RA4M2開發(fā)板基本模板搭建與LED指南

    瑞薩“RA MCU眾測(cè)寶典”環(huán)境搭建專題再添硬核實(shí)操!這次將解鎖“基本模板搭建與LED”技能,加入簡(jiǎn)易調(diào)度器實(shí)現(xiàn)多任務(wù)管理,一步步搞定“能直接落地”的開發(fā)模板,不管是入門練手還是項(xiàng)目開發(fā)都能復(fù)用。
    的頭像 發(fā)表于 02-24 14:43 ?5250次閱讀
    瑞薩RA-Eco-RA4M2開發(fā)板基本<b class='flag-5'>模板</b>搭建與LED指南

    【Moldex3D丨技巧分享】__ 壓縮制程模溫分析支援模板移動(dòng)

    納入模擬分析中,使模擬更貼近于實(shí)際狀況,將可以得到更準(zhǔn)確的模內(nèi)溫度預(yù)測(cè)。以下將說明如何在Moldex3D壓縮制程模擬中納入模板移動(dòng)行為以及其影響。part01操作流
    的頭像 發(fā)表于 01-14 16:25 ?503次閱讀
    【Moldex3D丨技巧分享】__ 壓縮制程模溫分析支援<b class='flag-5'>模板</b>移動(dòng)

    京東關(guān)鍵詞 API 場(chǎng)景的需求梳理模板

    京東關(guān)鍵詞 API 場(chǎng)景需求梳理模板模板適用于 聯(lián)盟推廣、商家運(yùn)營(yíng)、工具開發(fā)、市場(chǎng)分析 等基于京東關(guān)鍵詞 API 的業(yè)務(wù)需求梳理,可直接用于需求文檔撰寫、API 對(duì)接方案評(píng)審。 核心模塊 填寫項(xiàng)
    的頭像 發(fā)表于 01-08 13:45 ?158次閱讀

    CW32F030開發(fā)板的工程模板

    溫濕度實(shí)驗(yàn) EX9AD電位器實(shí)驗(yàn) 其中 Libraries是CW32官方的庫(kù)函數(shù)文件,類似STM32的標(biāo)準(zhǔn)庫(kù)或者HAL庫(kù),非常重要的東西。 CW32-48F大學(xué)計(jì)劃板源碼工程文件結(jié)構(gòu) 在官方提供
    發(fā)表于 12-26 08:08

    目標(biāo)追蹤的簡(jiǎn)易實(shí)現(xiàn):模板匹配

    一、目標(biāo)追蹤和圖像識(shí)別 一般來說,提到機(jī)器視覺這個(gè)概念都會(huì)想到圖像識(shí)別,比如人臉識(shí)別、文本識(shí)別等等,目標(biāo)追蹤這個(gè)概念在平時(shí)接觸的相對(duì)比較少。但實(shí)際上,目標(biāo)追蹤可以理解為圖像識(shí)別的動(dòng)態(tài)過程:圖像識(shí)別
    發(fā)表于 10-28 07:21

    店鋪裝修模板同步接口技術(shù)解析

    ? ?在電商平臺(tái)開發(fā)中,店鋪裝修模板的跨系統(tǒng)同步是核心需求。本文從接口設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)邏輯三個(gè)維度進(jìn)行技術(shù)拆解。 一、接口設(shè)計(jì)規(guī)范 基礎(chǔ)參數(shù) 請(qǐng)求方法:POST 端點(diǎn)路徑:/api/v1
    的頭像 發(fā)表于 10-17 15:24 ?300次閱讀
    店鋪裝修<b class='flag-5'>模板</b>同步接口技術(shù)解析

    電壓波動(dòng)與閃變的基本概念

    如果您是電力系統(tǒng)工程師、電氣設(shè)備維護(hù)人員或者相關(guān)專業(yè)的學(xué)生,應(yīng)該注意到了有關(guān)電能質(zhì)量的國(guó)家標(biāo)準(zhǔn)GB/T 12326-2008是有關(guān)電壓波動(dòng)和閃變的,那這兩個(gè)參數(shù)的考核意義是什么?國(guó)家標(biāo)準(zhǔn)規(guī)定這兩個(gè)參數(shù)如何計(jì)算、測(cè)量和考核?這篇文章帶您全面了解電壓波動(dòng)和閃變的基本概念、重要性以及
    的頭像 發(fā)表于 07-22 14:10 ?2990次閱讀
    電壓波動(dòng)與閃變的<b class='flag-5'>基本概念</b>

    Allegro Skill工藝輔助之導(dǎo)入疊層模板

    在PCB設(shè)計(jì)中,導(dǎo)入疊層模板能夠確保設(shè)計(jì)的標(biāo)準(zhǔn)化和規(guī)范化,避免因手動(dòng)設(shè)置疊層參數(shù)而可能出現(xiàn)的錯(cuò)誤或不一致情況。
    的頭像 發(fā)表于 07-10 17:10 ?3162次閱讀
    Allegro Skill工藝輔助之導(dǎo)入疊層<b class='flag-5'>模板</b>

    HarmonyOS5云服務(wù)技術(shù)分享--Serverless抽獎(jiǎng)模板部署

    startRaffle) 結(jié)束抽獎(jiǎng)回調(diào)函數(shù)(比如endRaffle) 記下函數(shù)名,后續(xù)配置要用到 3?? ??工程包準(zhǔn)備?? 下載官方提供的抽獎(jiǎng)模板工程包 解壓后重點(diǎn)檢查portal/dist目錄結(jié)構(gòu) 記得
    發(fā)表于 05-22 20:25

    基于LockAI視覺識(shí)別模塊:C++多模板匹配

    模板匹配是一種在圖像中同時(shí)尋找多個(gè)模板的技術(shù)。通過對(duì)每個(gè)模板逐一進(jìn)行匹配,找到與輸入圖像最相似的區(qū)域,并標(biāo)記出匹配度最高的結(jié)果。本實(shí)驗(yàn)提供了一個(gè)簡(jiǎn)單的多模板匹配案例,并將其封裝為一個(gè)
    發(fā)表于 05-14 15:00

    基于LockAI視覺識(shí)別模塊:C++多模板匹配

    模板匹配是一種在圖像中同時(shí)尋找多個(gè)模板的技術(shù)。通過對(duì)每個(gè)模板逐一進(jìn)行匹配,找到與輸入圖像最相似的區(qū)域,并標(biāo)記出匹配度最高的結(jié)果。本實(shí)驗(yàn)提供了一個(gè)簡(jiǎn)單的多模板匹配案例,并將其封裝為一個(gè)
    的頭像 發(fā)表于 05-14 14:37 ?1618次閱讀
    基于LockAI視覺識(shí)別模塊:C++多<b class='flag-5'>模板</b>匹配

    基于LockAI視覺識(shí)別模塊:C++模板匹配

    模板匹配是一種在圖像中尋找特定模式的技術(shù)。它通過滑動(dòng)一個(gè)模板圖像(較小的圖像)在輸入圖像上進(jìn)行比較,找到最相似的區(qū)域。本實(shí)驗(yàn)提供了一個(gè)簡(jiǎn)單的模板匹配案例,并將其封裝為一個(gè)自定義函數(shù)
    發(fā)表于 05-13 14:40

    基于LockAI視覺識(shí)別模塊:C++模板匹配

    模板匹配是一種在圖像中尋找特定模式的技術(shù)。它通過滑動(dòng)一個(gè)模板圖像(較小的圖像)在輸入圖像上進(jìn)行比較,找到最相似的區(qū)域。本實(shí)驗(yàn)提供了一個(gè)簡(jiǎn)單的模板匹配案例,并將其封裝為一個(gè)自定義函數(shù)pe
    的頭像 發(fā)表于 05-13 14:14 ?781次閱讀
    基于LockAI視覺識(shí)別模塊:C++<b class='flag-5'>模板</b>匹配

    STM32CUBEide有沒有像KEIL一樣可以自己指定函數(shù)注釋模板的方法?

    最近從keil轉(zhuǎn)到CUBEIDE編程了,現(xiàn)在非常不舒服的一點(diǎn)是函數(shù)注釋方面。STM32CUBEide有沒有像KEIL一樣可以自己指定函數(shù)注釋模板的方法,可以注釋函數(shù)形參啊、
    發(fā)表于 03-11 08:06