您的位置:首页 > 编程语言 > C语言/C++

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

2006-04-14 01:32 357 查看
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一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: