;泛型编程
即是广泛的类型编程的意思,常常用于那些函数重复编写但只有参数类型或者返回值不同,常用泛型编程解决,C语言呢用宏解决
;c++实现泛型编程用templeate模板来实现,其实就是代码的复制,当编译器扫描到模板初始化语法那么就会在当前文件中实例化一个函数或者类到本文件中,实例化的模板是存在实体的所以可以调试,而模板是不存在实体的,宏替换之后也不存在实体
函数模板(只写函数的实现而不关心其类型,类型通过外部初始化的时候增加一个叫做类型的参数来初始化一个函数模板或者类模板),
定义:每个函数实现一样,只是参数类型不一样那么就只写实现,剩下的编译器帮你完成最终代码(编译之前,预处理之后)
;编译器检查到有实例化模板的语法的时候
1实例化模板(也就是根据类型生成对应的类或者函数到文件)(注意这个是c++编译器自己自动生成实体的哦c是自己手动生成)
2做语法检查
3调用
;C语言宏模板
1先定义
2在自己实例化各个类型的模板实体(注意是自己手动的哦)
;类模板里的成员函数实现不能分开放在cpp中,必须放在.h中和声明在一起(内联函数也是这样)
原因是模板的处理在编译之前 预处理之后,预处理的时候不会处理.cpp文件的,换言之就是如果没找到实现就会报错,因为那时候还没处理到cpp文件呢
;如果模板的类型传进去个是另外的一个模板的话需要加空格
;类成员函数特例(传了特定的参数,那么这个类的这个成员函数,将使用特定的函数来通过模板实例化这个类)
;类特例(传了指定的类型那么构造函数或者析构函数,成员函数全部来这里哦(整个类的代码都特别实例化) 这就是类特例)
;数据成员特例(只有静态诗句成员才能特例)
;类模板传另外一个类模板,也就是说实例化的时候先生成嵌套关系中里面的一个类,然后外面的模板生成的类,使用这个类做参数的类型,或者什么的