1. 当用一个函数模板初始化一个函数指针或为一个函数指针赋值时, 编译器使用指针的类型来推断模板实参

template ctypename T> int compare (const T &, const T& );// pfl 指向实例 int compare (const int &, const int & )
int (*pf1) (const int&, const int& ) = compare;

1.1 如果不能从函数指针类型确定模板实参, 则产生错误:

/ / func 的重栽版本; 每个版本接受一个不同的函数指针类型
void func (int ( * ) (const strings, const strings ) );
void func (int (*) (const int &, const int & ) );
func (compare); / / 错误: 使用 compare 的哪个实例?

1.2 解决方法: 通过使用显式模板实参来消除 func 调用的歧义

如下表达式调用的 func 版本接受一个函数指针, 该指针指向的函数接受两个 const int &参数

// 正确: 显式指出实例化哪个 compare 版本
func (compare<int>); // 传递 compare (const int&, const int&)

C++ Primer 5th笔记(chap 16 模板和泛型编程)函数指针和实参推断相关推荐

  1. C++ Primer 5th笔记(chap 16 模板和泛型编程)转发参数包

    1. 使用可变参数模板与 forward 机制来编写函数, 实现将其实参不变地传递给其他函数(保持实参的原始类型) 1.1 eg class StrVec {public:template <c ...

  2. C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板

    1. 可变参数模板( variadic template) 一个接受可变数目参数的模板函数或模板类. 1.1 参数包 (parameter packet) 可变数目的参数被称为参数包,存在两种参数包: ...

  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)重载与模板

    1. 定义 函数模板可以被另一个模板或一个普通非模板函数重载: 名字相同的函数必须具有不同数量或类型的参数 1.1 函数模板匹配因素 对于一个调用, 其候选函数包括所有模板实参推断成功的函数模板实例. ...

  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断和引用

    template < typename T> void f (T &p) 函数参数p是一个模板类型参数T的引用, 编译器会应用正常的引用绑定规则: const 是底层的, 不是顶层 ...

  5. C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断

    1. 模板实参推断( template argument deduction) 在模板实参推断过程中, 编译器使用函数调用中的实参类型来寻找模板实参, 用这些模板实参生成的函数版本与给定的函数调用最为 ...

  6. C++ Primer 5th笔记(chap 16 模板和泛型编程)成员模板

    1. 成员模板( member template) 一个类( 无论是普通类还是类模板) 可以包含本身是模板的成员函数. 成员模板不能是虚函数. 1.1 普通( 非模板 ) 类的成员模板 / / 函数对 ...

  7. C++ Primer 5th笔记(chap 16 模板和泛型编程)默认模板实参

    1. 默认模板实参default template argument compare 有一个默认模板实参 less和一个默认函数实参 F () template <typename T, typ ...

  8. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化

    1. 默认情况下,一个类模板的成员函数只有当程序用到它时才进行实例化. (即使某种类型不能完全符合模板操作的要求(参见9.2节,第294页),我们仍然能用该类型实例化类todo). eg. //实例化 ...

  9. C++ Primer 5th笔记(chap 16 模板和泛型编程) 类模板的成员函数

    1. 分类 1.1 定义在类模板内的成员函数 被隐式声明为内联函数. 1.2. 类模板外部的成员函数, 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板 ...

最新文章

  1. 汇总|C++系统计时方法以及系统时间戳获取方法
  2. Django 中的 cookie 和 session
  3. Python 实现一个全面的单链表
  4. 存储过程,触发器,分页练习
  5. Mysql插入中文的字段内容时乱码的解决方法
  6. 数据结构笔记(二十四)-- 哈夫曼编译码
  7. 扩展 MongoDB.Driver 支持实体
  8. WCF 4.0一个鲜为人知的改变[兼书名征集]
  9. Word论文参考文献排版
  10. vuetify-icon图标显示不正常
  11. 用 QuantLib 给国债估值
  12. 计算机主机接电视机,电脑主机连接电视方法介绍 电脑主机连接电视注意事项...
  13. 修行一定要在寺院里吗,出家人离开寺院修行,都属邪门外道吗?
  14. 从键盘上输入以下的数据:TOM:89|JERRY:90|TONY:95,数据格式为“姓名:成绩|姓名:成绩|姓名:成绩”,对输入的内容按成绩进行排序,并将结果按成绩由高到低排序。
  15. Whois查询结果中不同域名状态的含义
  16. APP服务器与Web服务器的区别是什么?
  17. 微信小程序生命周期和路由传参详解
  18. 从双曲几何到Gauss-Bonnet-Chern定理
  19. java窗体中添加图片_在java窗体程序中添加图片的方法
  20. php 屏蔽浸膏,干浸膏含水量每100g约为

热门文章

  1. 常见数据归一化的几种方法
  2. MYSQL:子查询关键字 ANY/SOME/IN/ALL
  3. 主机到中继地址的发包路径
  4. Android --- Android Studio 错误: 非法字符: ‘\ufeff’
  5. Java 洛谷 P1425 小鱼的游泳时间
  6. matlab相机畸变校正csdn,android广角相机畸变校正算法和实现示例
  7. 课程及其编码字典python_【课程15】Python字典
  8. Android多个imei如何获取,如何在Android 10中获取IMEI号,这是获取在Android 10及以下Android 10中获取IMEI号的代码...
  9. 数据中心UPS电池故障引起火灾导致澳大利亚医院系统业务中断
  10. Database之SQLSever:SQL命令实现查询之多表查询、嵌套查询、分页复杂查询,删除表内重复记录数据、连接(join、left join和right join简介及其区别)等案例之详细攻略