《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一样。
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一样。
相关文章推荐
- 《C++ primer》学习笔记之二十五:template function 的实例化
- 《C++ primer》学习笔记之二十六:None-type template parameter
- 《C++ primer》学习笔记之三十五:function overload resolution之三寻找最佳函数,及常见编译错
- 《C++ primer》学习笔记之三十四:function overload resolution之二寻找可行函数集合
- 008: function的定义及调用
- C++ Primer 5th Chapter 6 学习笔记
- class template and construct function template
- js 在定义的时候立即执行的函数表达式(function)写法
- STL template&Container--function point & generic class
- Can a member function template be virtual?
- (原創) Function Pointer、Delegate和Function Object (C/C++) (template) (.NET) (C#)
- javascript笔记:javascript里面不同function定义的区别
- 《Flask Web开发》学习笔记之bug--(2)【AssertionError: View function mapping is overwriting an existing endpoi】
- PLS-00221: 'function' 不是过程或尚未定义
- 属性“$”的值为 null、未定义或不是 Function 对象
- C++ Primer ----- 定义与声明
- Openstack Heat Template 模板定义说明(一)
- 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义
- 《C++ primer》学习笔记之四:用define指令定义的常量的值做变量名
- 《C++ primer》学习笔记之二十:引用详解1、2、3