码迷,mamicode.com
首页 > 编程语言 > 详细

c++学习之template(二)

时间:2019-01-05 21:28:19      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:假设   函数   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>;
*/

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

c++学习之template(二)

标签:假设   函数   return   模板   reference   class   int   move   转换   

原文地址:https://www.cnblogs.com/vclm-aif/p/10226042.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!