【C++基础】模板基础与函数模板
生活随笔
收集整理的這篇文章主要介紹了
【C++基础】模板基础与函数模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 初識模板
- 函數模板
- 函數模板實例化
- 顯式實例化
- 隱式實例化
初識模板
求兩個int、float、char類型的數據的最大值:
C里面要這樣寫:
C++使用函數重載(多個同名函數處理多種類型數據的語法現象)可以使得三個函數的名字一樣:
而我們期待的是下面這種類型:
函數模板
單個類型參數:
template <typename T> returnType function(T para1,...) {//Body }在函數模板中,可以用泛型的地方包括:
1、函數返回值
2、函數參數
3、函數局部變量
多個類型參數:
template <typename T, typename S> auto add(T x1, S x2) {return (x1 + x2); }在主函數中調用此函數:
int main() {auto y = add(1,2.0);return 0; }編譯器根據函數調用的實參,生成函數模板的實例:
函數模板實例化
注意模板多態屬于靜態聯編,與函數重載屬于同一層面。
有兩種實例化方法 (確定模板實參的方法):
Explicit instantiation (顯式實例化)
Implicit instantiation (隱式實例化)
顯式實例化
強制某些函數實例化,可出現于程序中模板定義后的任何位置。
template < typename T > void f( T s ){std::cout << s << '\n'; } template void f<double>(double); // 實例化,編譯器生成代碼// void f(double s) { // T: double// std::cout << s << '\n';// } template void f<>(char); // 實例化 f<char>(char) ,推導出模板實參 template void f(int); // 實例化 f<int>(int) ,推導出模板實參隱式實例化
編譯器查看函數調用,推斷模版實參,實現隱式實例化。
#include <iostream> template<typename T> void f(T s) {std::cout << s << '\n'; } int main(){f<double>(1); // 實例化并調用 f<double>(double)f<>('a'); // 實例化并調用 f<char>(char)f(7); // 實例化并調用 f<int>(int)void (*ptr)(std::string) = f; // 實例化 f<string>(string) }由函數模板實例化得到的函數叫做“實例函數”,由類模板實例化得到的類叫做“實例類”
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【C++基础】模板基础与函数模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伊利纯牛奶多少钱一箱啊?
- 下一篇: 【设计模式之美】<Reading Not