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

可能其他还有一些东西,但是今天就先写那么点吧。

猜你喜欢

转载自www.cnblogs.com/vclm-aif/p/10226042.html