C++学习之模板:模板重载
2015-11-26 19:48
337 查看
对模板的重载,两个函数模板分别获得对象对应的字符串或者对应的指针的值和指针所指对象的值.
template<typename T> string debug_rep(const T& t) { ostringstream ret; ret << t; return ret.str(); } template<typename T> string debug_rep(T* p) { ostringstream ret; ret << p; if (p) ret << " " << debug_rep(*p); else ret << "null pointer"; return ret.str(); } int main() { string s("hi"); char c[] = { 'I','a','m' }; cout<<debug_rep(c); return 0; }
多个可行模板,将选择更加特例化的版本.这是因为const T&理论上可以任何类型,我们无法将它与const T*区分开来.例如:
string s("hi"); const string* sp = &s; cout<<debug_rep(sp);//会选择第二个版本,因为它更特例化
非模板和重载
string debug_rep(const string&s) { return '"' + s + '"'; } int main() { string s("hi"); const string* sp = &s; cout<<debug_rep(s);//选择非模板版本 return 0; }
重载模板和类型转换.当我们使用c类型的字符串指针时,对于版本1不会发生数组到指针的转换(引用),T被绑定到char[],对于版本2发生转换,则T被绑定到const char.这会发生一次类型转换,这种转换时被认为精确匹配的.而第三种则不是精确匹配.根据特例化的规则,会选择第二个.
相关文章推荐
- const的用法
- 快速排序
- C++矩阵库 Eigen 快速入门
- c++ ip地址的操作 c版
- C++11学习笔记(二)
- C++知识点梳理(1)
- C++ template学习记录(函数模板)
- C++项目调用C#dll项目
- VB与C++之间数据类型的对应关系
- 图像特征LBP原理及C++实现
- Android ndk 入门4 - C++实现
- C++ class static
- 取读浮点数
- 一个诡异的bug
- C++primer_泛型算法-插入迭代器和iostream迭代器
- C++ this pointer
- C++ Primer 学习笔记——函数(三)
- C++获取目录下所有图像文件的文件名
- c++-----强制类型转换
- C++ math库函数