模板

1、什么是模板?

模板是c++的一种特性,允许函数或者类(对象)通过泛型(generic types)的形式表现或者运行 模板可以使得函数或类在对应不同的类型(types)的时候正常工作,而无需为每一种类型分别写一份代码。

2、c++有两种类型的模板

1:函数模板(function tempalte):使用泛型参数的函数(function with generic parameters) 2:类模板(class template):使用泛型参数的类(class with generic parameters)

3、模板实例化

模板的声明(declaration)其实并未给出一个函数或者类的完全定义(definition),只是提供了一个函数或者类的语法框架(syntactical skeleton) 实例化是指从模板构建出一个真正的函数或者类的过程。用具体类型代替模板参数的过程叫做实例化;从而产生一个模板实例。 如果实例化一种类型,而该类型并不支持函数所使用的操作,那么就会导致一个编译错误。

3-1、实例化有两种类型

1:显示实例化-在代码中明确指定要针对哪种类型进行实例化 2:隐式实例化-在首次使用时根据具体情况使用一种合适的类型进行实例化

4、函数模板

4-1、什么是函数模板?

函数模板是参数化的一族函数(a famliy of functions) 通过函数模板,可以实例化一系类函数,这些函数都给予同一套模板框架,但是作用在不通类型的参数上

4-2、示例 :(针对不同的数据类型 比较两个数据的大小)

代码见:D:\Github\Storage\c++\standard_library\template\function_template_example.cpp

参数推导 函数重载

5、类模板

与函数模板类似,类也可以通过参数泛化,从而可以构建出一族不同的类实例(对象) 类模板实参可以是某一类型或常量(仅限int或enum)

5-1、示例

代码见:D:\Github\Storage\c++\standard_library\template\class_template_example.cpp

5-2、类模板特化

C++中的模板特化不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化。模板特化有时也称之为模板的具体化,分别有函数模板特化和类模板特化。 允许对一个类模板的某些模板参数类型做特化

特化的作用和好处 对于某种特殊的类型,可能可以做些特别的优化或提供不同的实现

避免在实例化的时候引起一些可能不好的行为 特化一个类模板的时候也意味着需要特化其所有参数化的成员函数

示例:D:\Github\Storage\c++\standard_library\template\class_template_example.cpp

5-3、模板偏特化

模板偏特化(Template Partitial Specialization)是模板特化的一种特殊情况,指显示指定部分模板参数而非全部模板参数,或者指定模板参数的部分特性分而非全部特性,也称为模板部分特化。与模板偏特化相对的是模板全特化,指对所有模板参数进行特化。模板全特化与模板偏特化共同组成模板特化。

模板偏特化主要分为两种,一种是指对部分模板参数进行全特化,另一种是对模板参数特性进行特化,包括将模板参数特化为指针、引用或是另外一个模板类。

results matching ""

    No results matching ""