《C++ primer》学习笔记之二十四:template function 的定义

本文深入探讨了C++模板函数的定义与使用方式,包括其声明、实例化时机及过程,并通过具体示例说明了模板参数的概念及其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

template function 的定义和使用:
 1. //定义一个function template
  //te.h
  template <typename T> void f(T t);  //声明一个function template。 typename T 叫template parameter
  template <typename T>     //定义一个function template
  void f(T t){ cout << << "f(" << typeid(t).name << ")" << endl; }; 
  
  template < template <typename elemT> T > void f(T t); //error:企图在template parameter内再嵌套一层template是行不通的。

 
  //调用
  //te.cpp
  f("abc");    //调用f,此时会实例化一个function: void f(char const *)
  
  //取函数地址
  int (*pf)(int) = f;  //取函数地址,此操作也会实例化一个function: void f(int)
  (*pf)("abc");   //即使没有这个调用,void f(int)也会实例化
  
  //显示实例化
  template void f(string); //会在此处实例化一个voidf(string)
         //不明白这样做有什么目的?好像对于编译器内部实现template有帮助
  
  function template要在header中定义(仅仅声明不行),在每个使用该function的文件中包含这个header。
  详细见上面的8(常见的编译错)之3(template function引起的link错误)。
  
  一个function template与一个普通的function的区别在于:function template可以多次实例话,即它的body的内容可以变化。
  这点与变量——常量的区别很像。
  关键点是:1.编译器何时实例化一个template_function
      2.如何实例化
  如果编译器决定实例化template,在实例化之后要做的事情就是编译这个生成的function,像编译普通的function一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值