日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

C++ 泛型编程 -- 函数模版

發(fā)布時(shí)間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 泛型编程 -- 函数模版 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

      • 定義
      • 聲明
      • 調(diào)用方式
      • 函數(shù)模版的重載
      • 函數(shù)模版的特點(diǎn)

工作中一個(gè)同事寫(xiě)了測(cè)試demo,想要自己嘗試使用發(fā)現(xiàn)調(diào)用老出錯(cuò),請(qǐng)教的時(shí)候發(fā)現(xiàn)是函數(shù)模版,有自己的調(diào)用方式,并且發(fā)現(xiàn)核心代碼中大量的函數(shù)模版和類(lèi)模版。
特此做一個(gè)函數(shù)模版相關(guān)的總結(jié),為今后更加熟練的開(kāi)發(fā)做好鋪墊。

定義

C++中,存在泛型編程的概念:即不考慮具體數(shù)據(jù)類(lèi)型的編程方式

函數(shù)模板是一種特殊的函數(shù),可以使用不同的類(lèi)型進(jìn)行調(diào)用,對(duì)于功能相同的函數(shù),不需要重復(fù)編寫(xiě)代碼,并且函數(shù)模板與普通函數(shù)看起來(lái)很類(lèi)似,區(qū)別就是類(lèi)型可以被參數(shù)化

聲明

函數(shù)模版的聲明方式如下:

template <typename T, typename U ...>
void func(T arg1, U arg2 ,...){}

其中:

  • template 聲明開(kāi)始進(jìn)行泛型編程
  • typename 聲明泛指類(lèi)型 ,即T

調(diào)用方式

  • 類(lèi)型的自動(dòng)推導(dǎo) 調(diào)用 func2(a,b)
  • 類(lèi)型的指定推導(dǎo) 調(diào)用func2<int,int>(a,b)
    實(shí)現(xiàn)如下:
#include <iostream>using namespace std;
template<typename T, typename U>
void func1() {T a;U b;cout << "T value is : " << typeid(a).name() << endl;cout << "U value is : " << typeid(b).name() << endl; 
}template <typename T, typename U>
void func2(T a, U b) {T c = a + b;cout << "T value + U value is : " << c << endl; 
}int main() {int a , b;a = 10;b = 11;/*第一種類(lèi)型的template function 調(diào)用方式*/func2(a,b);/*第二種類(lèi)型的template function 調(diào)用方式*/func1<char,int>();return 0;
}

輸出如下:

T value + U value is : 21
T value is : c
U value is : i

函數(shù)模版的重載

  • C++編譯器優(yōu)先考慮普通函數(shù)
  • 如果函數(shù)模板可以產(chǎn)生一個(gè)更好的匹配,那么就選擇函數(shù)模板
  • 也可以通過(guò)空模板實(shí)參列表<>限定編譯器只匹配函數(shù)模板
    實(shí)現(xiàn)如下:
#include <iostream>using namespace std;/*func3 為重載函數(shù)*/
template <typename T>
void func3(T a) {cout << "funct3(T a) " << endl;
}template <typename T, typename U>
void func3(T a, U b) {cout << "func3(T a, U b)" << endl;
}void func3(int a, float b)
{cout << "fun3(int a, float b)" << endl;
}int main() {int c = 0;float d = 1.0;func3(c);  //一個(gè)參數(shù)的模版函數(shù)func3(c,d);//調(diào)用普通函數(shù)fun3(int a, double b),能更完美好匹配func3(d,c);//第一個(gè)參數(shù)為double類(lèi)型,則使用函數(shù)模版func3<>(c,d); //限定只能使用函數(shù)模版return 0;
}

輸出如下:

funct3(T a) 
fun3(int a, float b)
func3(T a, U b)
func3(T a, U b)

函數(shù)模版的特點(diǎn)

  • 函數(shù)模板是泛型編程在C++中的應(yīng)用方式之一
  • 函數(shù)模板能夠根據(jù)實(shí)參對(duì)參數(shù)類(lèi)型進(jìn)行推導(dǎo)
  • 函數(shù)模板支持顯式的指定參數(shù)類(lèi)型
  • 函數(shù)模板是C++中重要的代碼復(fù)用方式
  • 函數(shù)模板通過(guò)具體類(lèi)型產(chǎn)生不同的函數(shù)
  • 函數(shù)模板可以定義任意多個(gè)不同的類(lèi)型參數(shù)
  • 函數(shù)模板中的返回值類(lèi)型必須顯式指定
  • 函數(shù)模板可以像普通函數(shù)一樣重載

總結(jié)

以上是生活随笔為你收集整理的C++ 泛型编程 -- 函数模版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。