日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

你們知道什么是函數(shù)模板、類模板?

FPGA之家 ? 來源:嵌入式客棧 ? 作者:嵌入式客棧 ? 2021-05-17 15:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

為什么需要模板

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

class Point_F { public: /*默認(rèn)傳入?yún)?shù)為0,0*/ Point_F(float x0 = 0, float y0 = 0) :x(x0), y(y0) /*初始化列表*/ { } /*用const修飾函數(shù),表示函數(shù)不會修改成員數(shù)據(jù)*/ float get_x() const { return x; } float get_y() const { return y; } private: /*一般會將數(shù)據(jù)放在私有區(qū),以對外隱藏*/ float x; float y; };

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

class Point_I { public: /*默認(rèn)傳入?yún)?shù)為0,0*/ Point_f(int x0 = 0, int y0 = 0) :x(x0), y(y0) /*初始化列表*/ { } /*用const修飾函數(shù),表示函數(shù)不會修改成員數(shù)據(jù)*/ int get_x() const { return x; } int get_y() const { return y; } private: /*一般會將數(shù)據(jù)放在私有區(qū),以對外隱藏*/ int x; int y; };

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

375e1134-b4c9-11eb-bf61-12bb97331649.png

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

376f7c4e-b4c9-11eb-bf61-12bb97331649.png

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

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

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

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

類模板(Class templates)

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

函數(shù)模板

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

template 《class identifier》 function_declaration; template 《typename identifier》 function_declaration;

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

《typename identifier》 、《class identifier》 定義函數(shù)參數(shù)泛型類型或函數(shù)體類變量泛型類型

比如:

#include 《iostream》 using namespace std; template 《typename T》 T max(T a, T b) { return a 》 b ? a : b ; }

又或者寫成如下形式:

#include 《iostream》 using namespace std; template 《class T》 T max(T a, T b) { return a 》 b ? a : b ; }

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

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

類模板

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

template 《typename T》 class Point_T { public: Point_T(T x0 = 0, T y0 = 0) :x(x0), y(y0) { } T get_x() const { return x; } T get_y() const { return y; } private: T x; T y; };

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

int main() { Point_T《int》 p1(1, 2); Point_T《float》 p2(1.1f, 2.2f); cout 《《 p1.get_x() 《《 endl 《《 p1.get_y() 《《 endl; cout 《《 p2.get_x() 《《 endl 《《 p2.get_y() 《《 endl; }

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

Point_T《int》 p1(1, 2); 000C1D6C push 2 000C1D6E push 1 000C1D70 lea ecx,[p1] 000C1D73 call Point_T《int》::Point_T《int》 (0C11D1h) Point_T《float》 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《float》::Point_T《float》 (0C1064h)

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

總結(jié)一下

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

編輯:jq

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

    關(guān)注

    90

    文章

    3724

    瀏覽量

    97458
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4422

    瀏覽量

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

    關(guān)注

    22

    文章

    2131

    瀏覽量

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

    關(guān)注

    1

    文章

    1673

    瀏覽量

    51961

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

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

    在之前簡化流程下的壓縮制程仿真中,為了便利使用者快速建模,對開模與合模狀態(tài)下的冷卻水路位置變化作了簡化的假設(shè),故冷卻效果可能會有誤差而影響到模擬分析的準(zhǔn)確度。因此,若能將冷卻水路隨著模板移動的行為
    的頭像 發(fā)表于 01-14 16:25 ?650次閱讀
    【Moldex3D丨技巧分享】__ 壓縮制程模溫分析支援<b class='flag-5'>模板</b>移動

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

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

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

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

    使用RV-STAR寫入模板程序時出錯怎么解決?

    我使用的是官方提供的RV-STAR板子,操作系統(tǒng)環(huán)境是Windows10。連上板子后也能識別到串口: 下載調(diào)試的程序就是模板提供的helloworld,在下載時出現(xiàn)以下錯誤: 請問是出現(xiàn)了什么問題?要如何解決?謝謝。
    發(fā)表于 11-06 06:58

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

    重新出現(xiàn)在幀圖象中時,迅速地重新捕捉到目標(biāo)。 以上對目標(biāo)追蹤這一領(lǐng)域做了簡要的說明,下面將會介紹目標(biāo)追蹤算法中最簡單的一種 —— 模板匹配算法。 三、模板匹配算法 模板匹配
    發(fā)表于 10-28 07:21

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

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

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

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

    涂鴉重磅發(fā)布萌寵語聊模板!On-App AI降噪+音頻處理技術(shù),讓遠(yuǎn)程安撫寵物更安心

    在當(dāng)前快節(jié)奏的生活背景下,寵物常常會因鏟屎官的頻繁外出、缺乏互動與情感陪伴,而產(chǎn)生孤獨抑郁、焦慮、暴躁易怒等問題。為了提升寵物的安全感,涂鴉重磅推出基于On-AppAI構(gòu)建的萌寵語聊模板,旨在通過
    的頭像 發(fā)表于 06-05 19:25 ?1093次閱讀
    涂鴉重磅發(fā)布萌寵語聊<b class='flag-5'>模板</b>!On-App AI降噪+音頻處理技術(shù),讓遠(yuǎn)程安撫寵物更安心

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

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

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

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

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

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

    基于LockAI視覺識別模塊:C++模板匹配

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

    基于LockAI視覺識別模塊:C++模板匹配

    模板匹配是一種在圖像中尋找特定模式的技術(shù)。它通過滑動一個模板圖像(較小的圖像)在輸入圖像上進行比較,找到最相似的區(qū)域。本實驗提供了一個簡單的模板匹配案例,并將其封裝為一個自定義函數(shù)pe
    的頭像 發(fā)表于 05-13 14:14 ?923次閱讀
    基于LockAI視覺識別模塊:C++<b class='flag-5'>模板</b>匹配
    辉南县| 年辖:市辖区| 周口市| 潮州市| 嘉荫县| 南投市| 海兴县| 卢龙县| 青川县| 得荣县| 东山县| 潜山县| 都昌县| 邮箱| 青田县| 东丰县| 玛纳斯县| 汉中市| 新泰市| 门源| 交口县| 孙吴县| 龙里县| 理塘县| 中方县| 宁国市| 临夏市| 永登县| 普宁市| 巴里| 青铜峡市| 沧州市| 兴文县| 长沙县| 拉萨市| 舟曲县| 徐州市| 磴口县| 扎鲁特旗| 宁强县| 双辽市|