C++ 泛型编程

模板(Template)

简单的说,模板是一种通用的描述机制,当使用模板时允许使用通用类型来定义函数或类等。模板引入了一种全新的编程思维方式,称为"泛型编程"或"通用编程"。

类型参数化

先看下面的示例代码:

#include<iostream>
#include<string>

using namespace std;

int add(const int a, const int b)
{
    cout<<"func 1"<<endl;
    return a + b;
}

double add(const double a, const double b)
{
    cout<<"func 2"<<endl;
    return a + b;
}

char* add(char* a, const char* b)
{
    cout<<"func 3"<<endl;
    return strcat(a, b);
}

int main()
{
    cout<<add(1, 2)<<endl;
    cout<<add(1.0, 2.02)<<endl;
    char x[20] = "Hello";
    char y[] = " c++";
    cout<<add(x, y)<<endl;
    return 0;
}

运行结果如下:

func 1
3
func 2
3.02
func 3
Hello c++

上面代码分别重载了三个add函数,编译器根据传递的参数决定调用的函数。

下面是使用了函数模板的示例:

#include<iostream>
#include<string>

using namespace std;

template<class T>
T add(const T& a, const T& b)
{
    return a + b;
}

int main()
{
    cout<<add(1, 2)<<endl;
    cout<<add(1.0, 2.02)<<endl;
    string x = "Hello";
    string y = " c++";
    cout<<add(x, y)<<endl;
    return 0;
}

运行结果如下:

3
3.02
Hello c++

模板的定义

template<class T>

或者

template<typename T>

函数模板

template<模板参数表>
返回类型 函数名(参数表)
{
//函数体
}

显示实例化

template 返回类型 函数名<类型实参表>(函数参数表);

特化

template<>返回类型 函数名[<类型实参表>](函数参数表)
{
//函数体
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,098评论 25 709
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,675评论 0 13
  • 流翠的绿叶,也掩不住你密密的心事,那清冽的气息,泛溢着青春的羞涩和美好!
    戴黛云阅读 1,157评论 0 0
  • 等在秋日的微光里 数着秋叶一片片的落下来 仿佛遍地都是金黄 摇曳着的风吹乱了裙摆 踏着清脆习习飞舞 等在秋天的风景...
    猫六酒阅读 1,943评论 0 0