c++学习之template

今天第一次写博客,写博客也是为了记录一天所学的总结把,或多或少。

直接进入正题,今天主要学的是模板;

首先是函数模板,在此之前回顾一下常规函数的定义:

return_type function_name(arguments){
 /*function body*/              
}

但是在需要参数类型不同,但是函数功能相同时,你需要重载多个函数来实现它:

int max(int32_t a, int32_t b){
    return a > b ? a : b;
}

double max(double a, double b){ return a > b ? a : b; } //...

这样的写法相当奇怪。函数模板就是用来处理这样的情况,它的定义是这样的:

template<typename T>
retruntype function_name(arguments){
 /*function body*/   
}

还是拿上面的max来打比方,函数模板下的max函数是这样的:

template<typename T>
T max(T a, T b){
    return a > b ? a : b;   
}

下面是它的一些解释:

int main() {
    int32_t a = 10,        b = 20;
    double c = 10.2, d = 10.1; max(a, b); //调用的是int32_t max(int32_t, int32_t) max(c, d); //调用的是double max(double, double) return 0; }

当然函数模板也有一些其他的功能如,如标准库begin和end的实现:

template<typename T, size_t N>
T* my_begin(T (&x)[N]) {
    return &x[0];
}

template<typename T, size_t N> T* my_end(T (&x)[N]) { return &x[0] + N; }

类模板也类似:

template<typename T>
class class_name{
    /*class body*/ };

留给名的一个问题:

在上面max函数中如果传入的是两个迭代器,他的问题怎么解决。

猜你喜欢

转载自www.cnblogs.com/vclm-aif/p/10225764.html
今日推荐