• 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)

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

  • 相关阅读:
    STL源码剖析之_allocate函数
    PAT 1018. Public Bike Management
    PAT 1016. Phone Bills
    PAT 1012. The Best Rank
    PAT 1014. Waiting in Line
    PAT 1026. Table Tennis
    PAT 1017. Queueing at Bank
    STL源码剖析之list的sort函数实现
    吃到鸡蛋好吃,看看是哪只母鸡下的蛋:好用的Sqlite3
    cJSON
  • 原文地址:https://www.cnblogs.com/zhuangzebo/p/4200122.html
Copyright © 2020-2023  润新知