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

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

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

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函数中如果传入的是两个迭代器,他的问题怎么解决。

转载于:https://www.cnblogs.com/vclm-aif/p/10225764.html

更多推荐