标签:假设 函数 return 模板 reference class int move 转换
今天所学的是模板实参推断。
首先假设我们比较两个类型不同的参数的函数模板,很简单:
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>; */
可能其他还有一些东西,但是今天就先写那么点吧。
标签:假设 函数 return 模板 reference class int move 转换
原文地址:https://www.cnblogs.com/vclm-aif/p/10226042.html