C++函数模版

如果对于两种不同类型的数值进行比较,可能会写出以下的代码:

int compare(const string &v1, const string &v2) {
    if (v1 < v2) {
        return -1;
    }
    if (v2 < v1) {
        return 1;
    }
    return 0;
}
int compare(const double &v1, const double &v2) {
    if (v1 < v2) {
        return -1;
    }
    if (v1 > v2) {
        return 1;
    }
    return 0;
}

这两个函数除对数值比较类弄不一样外,函数体是一样的,而且重写麻烦。

这时候就需要模版了

template <typename T>
int compare(const T &v1, const T &v2) {
    if (v1 < v2) {
        return -1;
    }
    if (v1 > v2) {
        return 1;
    }
    return 0;
}

用一个函数体即可完成,这个就是所谓的通用函数模板。

1、定义

  模版定义以关键字template开始,后跟模板参数列表(template), 这个列表是一个逗号分隔的一个或多个模版参数的列表,用小于号<和大于号>包起来。

2、实例化

  模版定义好后,调用会实例化

cout << compare(1, 2) << endl;
// compare(const int &v1, const int &v2)

 由于编译器遇到一个模版定义时,它并不生成代码。只有实例化出模版时一个特定的版本时,编译器才会生成代码。这一特性影响我们如何组织代码及错误何时被检测到。