C++_函数模板

Espre-sso / 2023-08-06 / 原文

  • 函数模板》是不进行编译的,因为类型还不知道

  • 模板的实例化》函数调用点进行实例化:在函数调用点,编译器用用户指定的类型,从原模板实例化一份函数代码出来

  • 模板函数》才是要被编译器所编译的

  • 模板类型参数 typename/class

  • 模板非类型参数

  • 模板的实参推演》可以根据用户传入的实参的类型,来推导出模板类型参数的具体类型:对于某些类型来说,依赖编译器默认实例化的模板函数,代码处理逻辑是有错误的)(编译器优先把compare处理成函数名字,没有的话,才去找模板函数)

  • 模板的特例化(专用化)特殊(不是编译器提供的,而是用户提供的)的实例化

  • 函数模板、模板的特例化、非模板函数的重载关系

注意:模板代码是不能在一个文件中定义,在另一个文件中使用的。模板代码调用之前,一定要看到模板定义的地方,这样的话,模板才能够进行正常的实例化,产生能够被编译器编译的代码。

所以,模板代码都是放在头文件当中的,然后在源文件当中直接进行#include包含