简单聊聊泛型编程

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

        最近相继看了智能指针和 STL 的部分源码可以看到模板无处不在。模板如此强大可究竟干了啥起了什么作用呢

        我们知道 c++ 是一门强类型语言强类型意味着任意一个变量都有对应的数据类型如 intdouble、或者自定义的类类型等。

        同样在定义函数参数时也需要确定参数类型如定义一个两个数相加的函数就需要提前知道这两个数分别是什么类型。若都是整型可定义为

int add(int a, int b)
{
    return a + b;
}

        若两个都是双精度型则定义为

double add(double a, double b)
{
    return a + b;
}

        如果参数为其它类型也需要做相应的定义。虽然这样可以实现需求但代码层面看起来是相当冗余且麻烦。而之所以麻烦就是因为参数的类型各不相同那么有没办法定义个不考虑类型的 add() 方法呢

        答案是有的只需利用关键字 templatetypename 做如下定义

template <typename T>
T add(T a, T b)
{
    return a + b;
}

        通过 typename 声明的 T 就实现了类型的抽象化这也就是泛型编程类模板亦是如此。

        有人说泛型编程是一种语言机制也有人说是一种编程风格个人以为更是一种编程思想。它并不局限于某一种语言不仅 c++ 中有在 javaswift 等语言中也看到其身影。可以说只要是强类型语言都有泛型编程的存在。而对于 c++ 而言是通过 template 实现了这种思想让泛型变得切实可行。

        相对 c 而言c++ 被认为是一门面向对象的语言。对象是对客观事物的抽象类是对对象的抽象而类模板呢更像是对类的抽象只需传个类型参数即将类模板实例化为一个类进而生成类对象。可见 c++ 确实是一门面向对象的语言但又不仅仅面向对象正如 🔗Effective C++ 条款一所说的视 c++ 为一个语言联邦 view c++ as a federation of languages

        今天的 c++ 已经是个多重范式编程语言multiparadigm programming language一个同时支持过程形式procedural面向对象形式object-oriented函数形式functional泛型形式generic、元编程形式metaprogramming的语言。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6