生活随笔
收集整理的這篇文章主要介紹了
C++学习——模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.C++模板
- 2.C++模板是什么,底層怎么實現的?
1.C++模板
模板是泛型編程的基礎,泛型編程即以一種獨立于任何特定類型的方式編寫代碼。
模板是創建泛型類或函數的藍圖或公式。
庫容器,比如迭代器和算法,都是泛型編程的例子,它們都使用了模板的概念。
每個容器都有一個單一的定義,
比如 向量,我們可以定義許多不同類型的向量,比如 vector
<int> 或 vector
<string
>。
#include <stdio.h>
#include<iostream>
using namespace std
;template <typename T1,typename T2>
void print(T1 value1
,T2 value2
){cout
<< "value=" << value1
+value2
<< endl
;
}template <class T1,int SIZE
>
class solution {
public:void print(T1 value
) {cout
<< "value=" << value
<< endl
;}void set(int i
, int value
) {if (i
>= SIZE
) {cout
<< "error" << endl
;}else {array
[i
] = value
;}}void print_array() {for (int i
= 0; i
< SIZE
; i
++) {cout
<< array
[i
] << " ";}cout
<< endl
;}
private:int array
[SIZE
];
};
int main()
{print(23,23.23);print(23.67, 9);solution
<double,5> s
;s
.set(0, 7);s
.set(1, 2);s
.set(2, 5);s
.set(3, 19);s
.set(4, 67);s
.print_array();return 0;
}
2.C++模板是什么,底層怎么實現的?
編譯器并不是把函數模板處理成能夠處理任意類的函數;
編譯器從函數模板通過具體類型產生不同的函數;
編譯器會對函數模板進行兩次編譯:
在聲明的地方對模板代碼本身進行編譯,在調用的地方對參數替換后的代碼進行編譯。
這是因為函數模板要被實例化后才能成為真正的函數,在使用函數模板的源文件中包含函數模板的頭文件,如果該頭文件中只有聲明,沒有定義,那編譯器無法實例化該模板,最終導致鏈接錯誤。
總結
以上是生活随笔為你收集整理的C++学习——模板的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。