C++的模板template

一、什么是模板

??????? C++中的模板分為類模板函數模板,并不是一個實際的類或函數,這指的是編譯器不會自動為其生成具體的可執行代碼。只有在具體執行時編譯器才幫助其實例化

二、為什么引入模板

??????? 拿我們最常見的交換函數來舉例子,如果我們編寫一個交換int類型變量的函數,如下:

bool Swap(int &a, int &b) {int c = a;a = b;b = c;return true;
}

??????? 但如果我們想要編寫一個通過函數來交換float的函數,我們又要寫另一個函數,如下:

bool Swap(float &a, float &b) {float c = a;a = b;b = c;return true;
}

???????? 那接下來如果需要交換double,char,bool,甚至一些結構體或者類的交換函數,那么我們的工作量就會很大。細心觀察會發現,其實上邊兩個函數唯一不同的便是交換的變量類型不同,如果我們把變量類型設置為一個抽象的X,在具體需要交換的時候,再去根據具體的類型去自動適應,這便是C++的template模板的巧妙之處。

三、使用方式

????????C++模板采用template關鍵字修飾

3.1 函數模板

??????? 具體寫法如下:

template <typename 參數類型1, typename 參數類型2,...>
返回值類型 函數名稱(形參1, 形參2,...) {函數體
}

??????? 上邊代碼的typename關鍵字也可以用class代替。下邊給出一個交換函數模板的例子:

template <typename T>
bool Swap(T &a, T &b) {T c = a;a = b;b = c;return true;
}

? 3.2 類模板

? ????????具體寫法如下:

template <typename 模板名稱1, typename 模板名稱2,...>
class 類名稱{類成員
}

??????? 注意,在實例化類模板對象時,需要在類的結尾加上<具體模板名稱>。 比如以下例子:

template <typename T1, typename T2>
class NNUM {private :T1 num1;T1 num2;public :NNUM(T1 num1, T1 num2) {this->num1 = num1;this->num2 = num2; }void print_NNUM(T2 str) {cout << "str : [" << str << "]" << endl;cout << "num1 : <" << this->num1 << ">, " << "num2 : <" << num2 << ">" << endl;}
};

?????? 這里是一個用了2個模板類型(T1和T2)的類模板,那么我們在實例化時候就要按照以下代碼,將具體需要使用的T1與T2類型體現出來:

NNUM<int, string> n1 = NNUM<int, string>(123, 456);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711990.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄 二叉樹第二周

目錄 101.對稱二叉樹 100.相同的樹 572.另一棵樹的子樹 104.二叉樹的最大深度 559.N叉樹的最大深度 111.二叉樹的最小深度 222.完全二叉樹的節點個數 110.平衡二叉樹 257.二叉樹的所有路徑 101.對稱二叉樹 101. 對稱二叉樹 已解答 簡單 相關標簽 相關企業 給你一…

《求生之路2》服務器如何選擇合適的內存和CPU核心數,以避免丟包和延遲高?

根據求生之路2服務器的實際案例分析選擇合適的內存和CPU核心數以避免丟包和延遲高的問題&#xff0c;首先需要考慮游戲的類型和對服務器配置的具體要求。《求生之路2》作為一款多人在線射擊游戲&#xff0c;其服務器和網絡優化對于玩家體驗至關重要。 首先&#xff0c;考慮到游…

Java應用程序注冊成Linux系統服務后,關閉Java應用程序打印系統日志

Java應用程序有自己的日志框架&#xff0c;有指定位置的日志文件&#xff0c;不需要在系統日志里記錄&#xff0c;占用磁盤空間。 1.Linux系統文件目錄 /etc/systemd/system/ 找到要修改的Java應用程序服務配置 比如bis-wz-80.service 2.設置不打印日志 StandardOutputnull S…

centos7 搭建 harbor 私有倉庫

一、下載安裝 1.1、harbor 可以直接從 github 上下載&#xff1a;Releases goharbor/harbor GitHub 這里選擇 v2.10.0 的版本 wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz 1.2、解壓 tar zxvf harbor-offlin…

L2 網絡 Mint Blockchain 正式對外發布測試網

Mint Blockchain 是由 NFTScan Labs 發起的聚焦在 NFT 生態的 L2 網絡&#xff0c;致力于促進 NFT 資產協議標準的創新和 NFT 在現實商業應用場景中的大規模采用。 Mint Blockchain 于 2024 年 2 月 28 號正式對外發布測試網&#xff0c;開始全面進入生態開發者測試開發階段。 …

2403C++,C++11玩轉無棧協程

原文 C11里也能玩無棧協程了? 答案是:可以! 事實上異網在很早時,C11里就可用無棧協程寫異步代碼了,只不過用起來不太方便,來看看C11里怎么用異網無棧協程寫一個回音服務器的吧. #包含 <異網.h> #包含 <內存> #包含 <向量> #包含 <異網/產生.h> 用 …

c++異常機制(5)-- 繼承與異常

我們在c異常機制(3)中自定義類型&#xff0c;我們將相應的異常封裝成了類&#xff0c;在類中實現一些方法&#xff0c;對異常進行處理。其中每一個類都實現了print()方法。 我們使用throw拋出相應異常的虛擬對象&#xff0c;在catch參數中進行匹配&#xff0c;但是如果有很多異…

Springboot項目集成短信驗證碼(超簡單)

操作流程 注冊驗證碼平臺創建驗證碼模版開始集成&#xff08;無需引入第三方庫&#xff09; 注冊并登陸中昱維信驗證碼平臺 獲取AppID和AppKey。 創建驗證碼模版 創建驗證碼模版&#xff0c;獲取驗證碼模版id 開始集成 創建controller import org.springframework.web.bi…

MATLAB環境下基于隨機游走拉普拉斯算子的快速譜聚類方法

古人有云&#xff0c;物以類聚&#xff0c;在面臨信息爆炸問題的今天&#xff0c;對信息類別劃分的價值日益顯現&#xff0c;并逐步成為學者們的研究熱點。分類和聚類是數據挖掘的重要工具&#xff0c;是實現事物類別劃分的左右手&#xff0c;聚類又是分類一種特殊的方式。所謂…

CodeWhisperer安裝教導--一步到位!以及本人使用Whisperer的初體驗。

CodeWhisperer是亞馬遜出品的一款基于機器學習的通用代碼生成器&#xff0c;可實時提供代碼建議。類似 Cursor 和Github AWS CodeWhisperer 亞馬遜科技的CodeWhisperer是Amazon于2021年12月推出的一款代碼補全工具&#xff0c;與GitHub Copilot類似。主要的功能有:代碼補全注釋…

貓毛過敏養貓人士的必備養貓好物-寵物空氣凈化器品牌分享

許多貓奴在與貓相處一段時間后突然對貓毛過敏&#xff0c;這真是令人難受。一些人認為對貓咪過敏是因為它們在空氣中飄浮的毛發引起的&#xff0c;但實際上大部分人之所以過敏是因為對貓身上一種微小的蛋白質過敏。這種導致過敏的蛋白質附著在貓咪的一些皮屑上。我們都知道貓咪…

前端架構: 腳手架通用框架封裝之入口文件開發(教程一)

腳手架入口文件開發 創建腳手架項目: abc-cli $ mkdir abc-cli && cd abc-cli 全局安裝 lerna, $ npm i -g lerna 基于 lerna 完成項目初始化 $ lerna init 基于 lerna 創建腳手架 cli $ lerna create cli一路回車 好現在生成了一個 cli 的模板&#xff0c;目前需要…

Qt 中Json的構造和解析簡單例子

概述: Qt中使用Json比較方便&#xff0c;不像純C需要導入CJson RapidJson JsonCpp等第三方的庫&#xff0c;主要使用到QJsonDocument、QJsonObject對象即可 1、如何構造一個json字符串 假如我們需要構造 {"cmd":"1001","data":{"content&q…

Linux 下安裝Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 啟動&#xff1a; python3 -m jupyter lab 2.安裝朱皮特 pip3 install -i https://pypi.douban.com/simpl…

高性能的key-value數據庫Redis 介紹

Redis 是一個高性能的key-value數據庫。 Redis是一個開源的鍵值存儲系統&#xff0c;通常用于緩存和消息傳遞。它支持多種類型的數據結構&#xff0c;如字符串、列表、集合、散列表和有序集合等。Redis的特點是提供了高性能、靈活性和可伸縮性。 Redis的主要特點包括&#xff…

Pytorch學習 day02(加載數據)

加載數據 * Dataset提供一種方式&#xff1a;來獲取數據及其label&#xff0c;給數據進行編號 * Dataloader為神經網絡提供不同的數據形式 Dataset的組織形式有很多種&#xff0c;例如&#xff1a; 將label放在文件夾名上&#xff0c;如下&#xff1a; #Dateset # --train #…

Python算法題集_組合總和

Python算法題集_組合總和 題39&#xff1a;組合總和1. 示例說明2. 題目解析- 題意分解- 優化思路- 測量工具 3. 代碼展開1) 標準求解【值傳遞回溯】2) 改進版一【引用傳遞堆棧回溯】3) 改進版二【過程值列表緩存遍歷后檢索】 4. 最優算法5. 相關資源 本文為Python算法題集之一的…

.halo勒索病毒的最新威脅:如何恢復您的數據?

尊敬的讀者&#xff1a; 隨著科技的發展&#xff0c;網絡安全已經成為我們日常生活中不可忽視的重要議題。其中&#xff0c;勒索病毒是當前網絡安全威脅中的一大挑戰&#xff0c;而“.halo”勒索病毒更是近期備受關注的惡意軟件之一。本文將介紹關于“.halo”勒索病毒的背景知…

AI新工具(20240227) StickerBaker文本生成貼紙的工具;Mistral Large;Rewind等

StickerBaker - 基于Replicate和Fly.io技術&#xff0c;100%開源的制作貼紙的工具 StickerBaker是一個基于人工智能的貼紙創作工具&#xff0c;允許用戶通過輸入特定的提示語句生成獨特的貼紙。這個工具使用了Replicate平臺來生成貼紙&#xff0c;同時依托于Fly.io作為其基礎設…

算法項目外包的收費方式

針對算法研究性項目的收費方式和注意事項&#xff0c;這取決于項目的具體性質、規模和所涉及的技術領域。以下是一些常見的收費方式和需要注意的問題&#xff0c;希望對大家有所幫助。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發公司&#xff0c;歡迎交流合作。 收…