C++ 泛型编程 -- 函数模版
生活随笔
收集整理的這篇文章主要介紹了
C++ 泛型编程 -- 函数模版
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 定義
- 聲明
- 調(diào)用方式
- 函數(shù)模版的重載
- 函數(shù)模版的特點
工作中一個同事寫了測試demo,想要自己嘗試使用發(fā)現(xiàn)調(diào)用老出錯,請教的時候發(fā)現(xiàn)是函數(shù)模版,有自己的調(diào)用方式,并且發(fā)現(xiàn)核心代碼中大量的函數(shù)模版和類模版。
特此做一個函數(shù)模版相關的總結,為今后更加熟練的開發(fā)做好鋪墊。
定義
C++中,存在泛型編程的概念:即不考慮具體數(shù)據(jù)類型的編程方式
函數(shù)模板是一種特殊的函數(shù),可以使用不同的類型進行調(diào)用,對于功能相同的函數(shù),不需要重復編寫代碼,并且函數(shù)模板與普通函數(shù)看起來很類似,區(qū)別就是類型可以被參數(shù)化
聲明
函數(shù)模版的聲明方式如下:
template <typename T, typename U ...>
void func(T arg1, U arg2 ,...){}
其中:
- template 聲明開始進行泛型編程
- typename 聲明泛指類型 ,即T
調(diào)用方式
- 類型的自動推導 調(diào)用 func2(a,b)
- 類型的指定推導 調(diào)用func2<int,int>(a,b)
實現(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;/*第一種類型的template function 調(diào)用方式*/func2(a,b);/*第二種類型的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)生一個更好的匹配,那么就選擇函數(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); //一個參數(shù)的模版函數(shù)func3(c,d);//調(diào)用普通函數(shù)fun3(int a, double b),能更完美好匹配func3(d,c);//第一個參數(shù)為double類型,則使用函數(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ù)模版的特點
- 函數(shù)模板是泛型編程在C++中的應用方式之一
- 函數(shù)模板能夠根據(jù)實參對參數(shù)類型進行推導
- 函數(shù)模板支持顯式的指定參數(shù)類型
- 函數(shù)模板是C++中重要的代碼復用方式
- 函數(shù)模板通過具體類型產(chǎn)生不同的函數(shù)
- 函數(shù)模板可以定義任意多個不同的類型參數(shù)
- 函數(shù)模板中的返回值類型必須顯式指定
- 函數(shù)模板可以像普通函數(shù)一樣重載
總結
以上是生活随笔為你收集整理的C++ 泛型编程 -- 函数模版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一箱橙子有20个,如果每千克大约有4个橙
- 下一篇: Rocksdb 与 TitanDb 原理