【C++中的模板】

📅 2026/6/17 11:36:02
【C++中的模板】
C中的模板文章目录C中的模板一、模板的定义二、函数模板函数模板的重载三、类模板C中的模板C是编译型语言是强类型性语言。在编译时会进行很严格的类型检查为了解决强类型语言灵活性与严格性的冲突提出了模板。例如函数重载时需要定义多个同名函数但是函数参数不一致。使用模板的话只需要定义一个函数在调用时能够智能的实例化出对应的模板。一、模板的定义// 示例如下templateclass/typenameTTadd(T x,T y){returnxy;}二、函数模板函数模板的实例化过程函数模板-生成相对应的模板函数-编译-链接-可执行文件隐式实例化与显式实例化隐式实例化 没有指出转换类型显式实例化显示指出了转换类型函数模板的重载函数模板与函数模板的重载名称相同参数不同不推荐使用交换顺序更推荐使用参数个数不同函数模板与普通函数重载普通函数优先于函数模板头文件与实现文件形式对模板的使用必须要拿到模板的全部实现如果只有一部分那么推导也只能推导出一部分无法满足需求。换句话说就是模板的使用过程中其实没有了头文件和实现文件的区别在头文件中也需要获取模板的完整代码不能只有一部分。模板的特化template后直接跟 里面不写类型在函数名后跟 其中写出要特化的类型使用模板的规则1.在一个模块中定义多个通用模板的写法应该谨慎使用2.调用函数模板时尽量使用隐式调用让编译器推导出类型3.无法使用隐式调用的场景只指定必须要指定的类型4.需要使用特化模板的场景就根据特化模板将类型指定清楚。模板的参数类型类型参数与非类型参数指定的类型 推导出的类型 类型的默认参数成员函数模板成员函数模板不能用virtual修饰三、类模板1需要带上template模板形参列表如果有默认参数此处不要写写在声明时就够了2在添加作用域限定时需要写上完整的类名和模板实参列表