1. 程式人生 > >c++學習之template(二)

c++學習之template(二)

今天所學的是模板實參推斷。

首先假設我們比較兩個型別不同的引數的函式模板,很簡單:

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>
2
auto 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>;
*/

可能其他還有一些東西,但是今天就先寫那麼點吧。