zoukankan      html  css  js  c++  java
  • C++ template模板编程

    模板是C++泛型编程的基础,一个模板就是一个创建类或者函数的蓝图或者公式。当使用一个vector这样的泛型类型,我们提供足够的信息,就可以将蓝图转换成特定的类或者函数。

    假设我们编写一个函数来比较两个值。

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

    这两个函数除了参数不一样外,返回值、函数体是一模一样的。

    当我们使用这个函数时,需要把每种类型都定义一个相同函数体的函数,这是非常繁琐的,所以我们用到了template模板。

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

    模板定义以template开始,后跟一个模板参数列表(列表里可以有多个参数用“,”分割)。

    调用模板时我们可以使用参数的显式或者隐式调用。

    //implicitly
    cout << compare(1,0) << endl;
    //explicitly
    cout << compare<double>(1,0) << endl;

    模板类型参数,类型参数可以用来指定返回类型或者函数的参数类型,以及在函数体内用于变量的声明或者类型转换。类型参数的关键字是class或者typename

    template <typename T> T Foo(T* p)
    {
        T tmp = *p;
        return tmp;
    }
    template <typename T,class U> T calc (const T&,const U&);
     
  • 相关阅读:
    大型项目使用Automake/Autoconf完成编译配置
    用C语言编写Windows服务程序的五个步骤
    RPC的发展历史(本质就是双方定义好协议,传递参数后远程调用)
    libuv和libev 异步I/O库的比较
    zlog 程序日志的库 交叉编译(Linux生成ARM库,观察执行步骤)
    应用服务
    EvnetBus
    this指向
    CPU使用率
    数据量小,创建索引有必要吗
  • 原文地址:https://www.cnblogs.com/zebra-bin/p/13733248.html
Copyright © 2011-2022 走看看