c++學習之template(二)
阿新 • • 發佈:2019-01-05
今天所學的是模板實參推斷。
首先假設我們比較兩個型別不同的引數的函式模板,很簡單:
1 template<typename A, typename B> 2 int campare(A a, B b) { 3 if (a > b) return 1; 4 else if (a < b) return -1; 5 return 0; 6 }
它的用法是這樣的:
1 int main() { 2 int32_t a = 10, b = 20; 3 double c = 10.2, d = 10.1; 4 campare<int32_t, double>(a, c); //呼叫int campare(int32_t, double) 5 campare(b, d); //呼叫int campare(int32_t, double) 6 campare<double>(a, b); //呼叫int campare(double, double) 7 return 0; 8 }
假設我們不知道函式模板具體的返回型別,可以用decltype來獲取表示式的返回型別:
1 template<typename A> 2auto return_point_value(A beg, A end) -> decltype(*beg) { //返回的型別為decltype(*beg) => A 3 return *beg; 4 }
標準庫也包含幾個型別轉換模板庫:
/* remove_reference<T>; add_const<T>; add_lvalue_reference<T>; add_rvalue_reference<T>; remove_pointer<T>; add_pointer<T>; make_signed<T>; make_unsigned<T>; remove_extent<T>; remove_all_extents<T>;*/
可能其他還有一些東西,但是今天就先寫那麼點吧。