c++模板的原理與使用

C++中實現代碼復用有兩個方式:類的繼承(即實現了多態),以及模板的使用。這里介紹的模板的知識。

模板的目的:

同樣的代碼適用于不同類型下的使用,實現代碼的復用目的。

模板的原理:

編譯階段,由編譯器根據給如的模板類型確定具體該產生出什么類(當編譯器編譯到此處才產生出該具體的類),因此,模板的處理其實是編譯階段就完成了,相當于編譯器編譯階段自動幫我們生成了大量的不同類型的類的代碼,減少了我們的編碼量,同時運行時候高效率。所以,c++強大,其實可以說是它的編譯器牛逼!

模板的形式:

模板類,模板全局函數,模板類中的成員函數,注意,沒有模板成員變量(如果想要成員變量也是模板的,那么就整個類弄成模板類,此時成員函數也可以模板化了)。

模板編寫:

模板函數的定義(無論是全局函數還是一個類的成員函數),必須與聲明在同一個文件中,不能聲明在.h文件,定義寫在.cpp文件,這是不可以的,因為編譯器編譯到該模板函數時候,它需要知道函數的內部實現,根據給入的類型來生成具體的函數,所以沒有定義的話就會直接報錯了(因為此時編譯器是不會去別的文件尋找其定義的,還沒到鏈接階段呢,更不會尋找其它文件的信息)

template <class Return, class Class>

用class或者typename都可以,一樣的作用

模板類定義:

使用的時候,總是需要我們帶著Name<Xx, Xx>這樣指定傳入的類名,因為這樣才是一個實際的類,而Name<Xx, Yy>,就跟前面這個類不是同一個類的

模板的特化

模板特化:就是在實例化模板時,對特定類型的實參進行特殊處理,即實例化一個特殊的實例版本。目的:對于一些特殊的類型,仍然能使得保持用戶調用接口不變。C++模板(函數模板/類模板)_c++ 模板成員函數_DR5200的博客-CSDN博客

模板的使用例子:

這里,我用qt寫了個線程管理的例子,封裝了一個非常方便的線程類,就是用的模板方式,其中用到了模板類,模板成員函數,值得參考一下:qt自己實現方便的線程管理類_我是標同學的博客-CSDN博客

c++模板的使用,需要了解和注意的就是上面這些內容了,關于一些具體知識,可以參考如下博客:

C++——模板(超詳細的模板解析)_c++模板___JAN__的博客-CSDN博客

qt使用模板template,報錯無法解析外部符號_Y_Hanxiao的博客-CSDN博客

20200403 - 模板函數實現和聲明必須在同一個頭文件里_模板函數的聲明與實現_baihebeijixing的博客-CSDN博客

C++類模板_小梁今天敲代碼了嗎的博客-CSDN博客

C++ 模板(Template)總結,長點小知識_函數_類型_int

C++類模板(模板類)詳解

C++模板的使用_c++模板函數調用_sg-expert的博客-CSDN博客

C++函數模板_coal miner的博客-CSDN博客

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

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

相關文章

Cygwin 配置C/C++編譯環境以及如何編譯項目

文章目錄 一、安裝C、C編譯環境需要的包1. 選擇gcc-core、gcc-g2. 選擇gdb3. 選擇mingw64下的gcc-core、gcc-g4. 選擇make5. 選擇cmake6. 確認更改7. 查看包安裝狀態 二、C、C 項目編譯示例step1&#xff1a;解壓縮sed-4.9.tar.gzstep2&#xff1a;執行./configure生成Makefile…

shell之正則表達式及三劍客grep命令

一、正則表達式概述 什么是正則表達式&#xff1f; 正則表達式是一種描述字符串匹配規則的重要工具 1、正則表達式定義: 正則表達式&#xff0c;又稱正規表達式、常規表達式 使用字符串描述、匹配一系列符合某個規則的字符串 正則表達式 普通字符&#xff1a; 大小寫字母…

opencv視頻截取每一幀并保存為圖片python代碼CV2實現練習

當涉及到視頻處理時&#xff0c;Python中的OpenCV庫提供了強大的功能&#xff0c;可以方便地從視頻中截取每一幀并將其保存為圖片。這是一個很有趣的練習&#xff0c;可以讓你更深入地了解圖像處理和多媒體操作。 使用OpenCV庫&#xff0c;你可以輕松地讀取視頻文件&#xff0…

判斷推理 -- 圖形推理 -- 位置規律

一組圖&#xff1a;從前往后找規律。 二組圖&#xff1a;從第一組圖找規律&#xff0c;第二組圖應用規律。 九宮格&#xff1a; 90%橫著看找規律&#xff0c;第一行找規律&#xff0c;第二行驗證規律&#xff0c;第三行應用規律。 所有有元素組成都是線&#xff0c;三角形&…

面試熱題(驗證二叉搜索樹)

給你一個二叉樹的根節點 root &#xff0c;判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下&#xff1a; 節點的左子樹只包含 小于 當前節點的數。節點的右子樹只包含 大于 當前節點的數。所有左子樹和右子樹自身必須也是二叉樹 二叉樹滿足以上3個條件&#xff0c…

spark的使用

spark的使用 spark是一款分布式的計算框架&#xff0c;用于調度成百上千的服務器集群。 安裝pyspark # os.environ[PYSPARK_PYTHON]解析器路徑 pyspark_python配置解析器路徑 import os os.environ[PYSPARK_PYTHON]"D:/dev/python/python3.11.4/python.exe"pip inst…

喜盈門、夢百合競相入局,智能床墊起風了

配圖來自Canva可畫 現代人的生活壓力普遍大&#xff0c;熬夜、失眠是常有的事&#xff0c;提高睡眠質量十分的重要。近些年來&#xff0c;市面上出現了許多輔助睡眠的產品&#xff0c;比如香薰、褪黑素、蒸汽眼罩、降噪耳塞、助眠枕、睡眠監測app等助眠神器。可以說為了睡個好…

【CLion + ROS2】在 clion 中編譯調試 ros2 package

目錄 0 背景1. 命令行編譯 ros2 package2. 使用 clion 打開 ros2 工程3. 使用 clion 編譯整個 ros2 工程3.1 使用 clion 的 external tool 配置 colcon build3.2 開始編譯 dev_ws 工程3.3 編譯結果&#xff1a; 4. 調試單獨的 ros2 package4.1 創建 ros2 package 的獨立的 colc…

【Git】版本控制器詳解之git的概念和基本使用

版本控制器git 初始Gitgit的安裝git的基本使用初始化本地倉庫配置本地倉庫三區協作添加---add修改文件--status|diff版本回退--reset撤銷修改刪除文件 初始Git 為了能夠更?便我們管理不同版本的?件&#xff0c;便有了版本控制器。所謂的版本控制器&#xff0c;就是?個可以記…

yolo源碼注釋2——數據集配置文件

代碼基于yolov5 v6.0 目錄&#xff1a; yolo源碼注釋1——文件結構yolo源碼注釋2——數據集配置文件yolo源碼注釋3——模型配置文件yolo源碼注釋4——yolo-py 數據集配置文件一般放在 data 文件夾下的 XXX.yaml 文件中&#xff0c;格式如下&#xff1a; path: # 數據集存放路…

基于ssm+vue的新能源汽車在線租賃管理系統源碼和論文PPT

基于ssmvue的新能源汽車在線租賃管理系統源碼和論文PPT010 開發環境&#xff1a; 開發工具&#xff1a;idea 數據庫mysql5.7(mysql5.7最佳) 數據庫鏈接工具&#xff1a;navcat,小海豚等 開發技術&#xff1a;java ssm tomcat8.5 摘 要 隨著科學技術的飛速發展&#xff0…

Ajax及前端工程化

Ajax&#xff1a;異步的js與xml。 作用&#xff1a; 1、通過ajax給服務器發送數據&#xff0c;并獲得其響應的數據。 2、可以在不更新整個網頁的情況下&#xff0c;與服務器交換數據并更新部分網頁的技術。 一、同步與異步 二、原生Ajax 1、準備數據地址 2、創建XMLHttpReq…

SCSS的基本用法

1、聲明變量 $ 聲明變量的符號 $ 下面這張圖左半部分是scss的語法&#xff0c;右半部分是編譯后的css。&#xff08;整篇文章皆是如此&#xff09; 2、默認變量 !default sass 的默認變量僅需要在值后面加上 !default 即可。 如果分配給變量的值后面添加了 !default 標志…

Qt 雜項(Qwt、樣式等)

Qt隱藏窗口邊框 this->setWindowFlags(Qt::FramelessWindowHint);Qt模態框 this->setWindowModality(Qt::ApplicationModal);QLable隱藏border 代碼中設置 lable->setStyleSheet("border:0px");或者UI中直接設置樣式&#xff1a;“border:0px” Qwt開源…

JS實現樹形結構、一維數組以及map之間的轉換

const treeData[ {id:1, name:中國, children:[ {id:11,name:河南省,children:[{id:111,name:南陽市,children:[{id:1111,name:淅川縣,children:null}]},{id:112,name:鄭州市,children:[{id:1121,name:中牟縣,children:null}]}] }, {id:22,name:廣東省,children:[{id:221,name:…

c++中的多態

文章目錄 1.多態的概念1.1概念 2.多態的定義及實現2.1多態的構成條件2.2虛函數2.3虛函數的重寫2.4 C11 override 和 final2.5 重載、覆蓋(重寫)、隱藏(重定義)的對比 3. 抽象類3.1概念3.2接口繼承和實現繼承 4.多態的原理4.1虛函數表4.2多態原理分析4.3 動態綁定與靜態綁定 5.單…

學習筆記整理-面向對象-03-構造函數

一、構造函數 1. 用new調用函數的四步走 new 函數();JS規定&#xff0c;使用new操作符調用函數會進行"四步走"&#xff1a; 函數體內會自動創建出一個空白對象函數的上下文(this)會指向這個對象函數體內的語句會執行函數會自動返回上下文對象&#xff0c;即使函數沒…

HDMI接口的PCB布局布線要求

高清多媒體接口&#xff08;High Definition Multimedia Interface&#xff09;&#xff0c;簡稱&#xff1a;HDMI&#xff0c;是一種全數字化視頻和聲音發送接口&#xff0c;可以發送未壓縮的音頻及視頻信號。隨著技術的不斷提升&#xff0c;HDMI的傳輸速率也不斷的提升&#…

使用GEWE框架進行微信群組管理(三)

友情鏈接&#xff1a;GEWE框架官網 geweapi.com 點擊訪問即可。 邀請或添加聯系人進群 小提示&#xff1a; 不管是添加40人以內還是以上都用此接口cause填寫邀請進群的理由 請求URL&#xff1a; http://域名地址/api/group/invite 請求方式&#xff1a; POST 請求頭&…