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

来源:互联网 发布:博客源码资源站 编辑:程序博客网 时间:2024/06/05 12:46

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一样。

原创粉丝点击