模板实参推断
来源:互联网 发布:java 参数多态 编辑:程序博客网 时间:2024/05/01 04:58
定义
从函数调用获得的实参确定模板实参的类型和值的过程叫做模板实参推断 《C++ Primer 4th》
举例
template<class Glorp>//模板类型形参int compare(const Glorp& v1,const Glorp& v2)//函数形参{ if(v1<v2) { return -1; } if(v2<v1) { return 1; } return 0;}int _tmain(int argc, _TCHAR* argv[]){ compare(1,0);//未显式指定模板参数类型,所以参数推导机制起作用 compare(3.14,2.7); return 0;}
模板实参推导规则
1)模板函数的多个形参的类型是同一个模板类型形参,推断出来的函数的这些实参类型要完全匹配
以下调用代码会导致如下错误:
short i=0; int j=3; compare(i,j);Error 1 error C2782: 'int compare(const Glorp &,const Glorp &)' : template parameter 'Glorp' is ambiguous
2)模板函数的形参是非引用类型,忽略const
以下调用代码正确:
template<class A>void Fobj(A a){ cout<<a<<endl;}nt _tmain(int argc, _TCHAR* argv[]){ const int x=9; Fobj(x); return 0;}
3)形参如果是const 引用或者指针,实参可以使非const引用或者指针,编译器会自动转换到const
4) 实参是数组或函数的
1.非引用类型模板形参
可以自动转换成数组指针或者函数指针的形参
2. 引用类型模板形参
不能自动转换成数组指针或者函数指针的形参,参数推导出错
5)可以根据函数指针推断模板实参
例如:
template <typename T> int compare (const T& ,const T&);int (*pf1) (const int&,const int&) = compare<int>;
这里compare<int>模板被赋值给pf1函数指针。以后调用pf1执行函数的时候,编译器使用pf1的类型来推导模板实参。
6)模板实参推断顺序是从函数返回值开始,从左至右逐一推导
7)为防止推导失败,可以在调用函数时显式指定模板参数类型
- 模板实参推断
- 模板实参推断
- 模板实参推断
- 模板实参推断
- 模板实参推断
- C++模板实参推断
- 模板实参推断
- 模板实参推断与引用
- 模板实参推断与函数指针
- C++:模板实参推断及引用折叠
- 模板实参推断与函数指针
- C++primer学习:模板编成(5):模板实参推断{1}
- 模板与泛型编程之模板实参推断
- 模板实参推断与函数指针的一些事
- C++学习笔记58——模板实参推断
- 模板实参推断和引用以及move和forward详解
- C++语法基础--模板实参推断,模板类型形参的实参的受限转换,模板实参推断与函数指针
- C++primer阅读笔记-模板与泛型编程(模板实参推断)
- 2006-08-20 快开学了
- 网站
- asp.net2.0学习10---WebService
- NDS游戏开发 小有进步
- 面试技巧
- 模板实参推断
- 基于数组或链表的堆栈实现
- On The Care and Handling of Cookies
- 求伯君:金山电脑公司总裁
- ASProtect SKE 2.3 build 06.26 Beta 汉化版
- 吃饭
- 再见我的师大,再见我的爱
- 又晃了一天!
- 风寂寞地吹