c++學習之template
阿新 • • 發佈:2019-01-05
今天第一次寫部落格,寫部落格也是為了記錄一天所學的總結把,或多或少。
直接進入正題,今天主要學的是模板;
首先是函式模板,在此之前回顧一下常規函式的定義:
return_type function_name(arguments){
/*function body*/
}
但是在需要引數型別不同,但是函式功能相同時,你需要過載多個函式來實現它:
int max(int32_t a, int32_t b){
return a > b ? a : b;
}
double max(double a, double b){ return a > b ? a : b; } //...
這樣的寫法相當奇怪。函式模板就是用來處理這樣的情況,它的定義是這樣的:
template<typename T>
retruntype function_name(arguments){
/*function body*/
}
還是拿上面的max來打比方,函式模板下的max函式是這樣的:
template<typename T>
T max(T a, T b){
return a > b ? a : b;
}
下面是它的一些解釋:
int main() {
int32_t a = 10, b = 20;
double c = 10.2, d = 10.1; max(a, b); //呼叫的是int32_t max(int32_t, int32_t) max(c, d); //呼叫的是double max(double, double) return 0; }
當然函式模板也有一些其他的功能如,如標準庫begin和end的實現:
template<typename T, size_t N>
T* my_begin(T (&x)[N]) {
return &x[0];
}
template<typename T, size_t N> T* my_end(T (&x)[N]) { return &x[0] + N; }
類模板也類似:
template<typename T>
class class_name{
/*class body*/ };
留給名的一個問題:
在上面max函式中如果傳入的是兩個迭代器,他的問題怎麼解決。