测试结论:

1 函数指针 -- 使用形参固定的一系列函数作为某个函数的形参 -- callback机制

2 模板指针 -- 使用形参可变的一系列函数作为某个函数的形参 --

3 typename -- 在有 struct 或者 class 的情况下,用于告知编译器,其后的,是一个 type(类型,就可以拿来定义变量等操作) ,而不是成员。

测试代码:

#include <iostream>
#include <string>
#include <vector> template <class T>
void AddVariable(std::string Name ,T value)
{
std::cout << Name << ", " << value << std::endl;
} template <class T>
void SetVariable(std::string Name, T value)
{
AddVariable(Name, value);
} template <class T> // 测试模板指针 Parameter 和 variable 是同级的
void AddParameter(std::string Name, T value)
{
std::cout << Name << ", " << value << std::endl;
} template <class T> // 测试模板指针 Parameter 和 variable 是同级的
void SetParameter(std::string Name, T value)
{
AddParameter(Name, value);
} // 函数和模板同名,先调用符合的函数
void AddVariable(std::string Name, int value)
{
std::cout << Name << ", " << value << std::endl;
} void SetVariable(std::string Name, int value)
{
AddVariable(Name, value);
} // 函数指针 这里的 pfun 的形参是确定的。
// 为了代表一系列相同形参的函数
typedef void(*FunType)(std::string, int);
void SetVariableByFunPtr (FunType pfun, std::string name, int value)
{
pfun(name, value);
} // 模板指针 不能使用函数指针,因为这里的 pfun 的形参应该是不确定的。
// 所以 FunType 的定义要改变
// 为了代表一系列相同形参的模板
template <class T>
struct Type
{
typedef void (*FunType)(std::string name, T value);
}; // template <class T> typedef void(*FunType)(std::string name, T value); // 错!typedef 模板,非法 // typename 用于说明这是一个 type(可以定义变量) 而不是成员(不可以定义变量)。
template <class T>
void SetVariableByTemplatePtr(typename Type<T>::FunType pfun, std::string name, T value)
{
std::vector<T> vecT(10);
pfun(name, value);
} int main()
{
//SetVariable("Score: ", 128); // call function
//SetVariable("Score: ", 123.98); // call template
//SetVariableByFunPtr(SetVariable, "Score: ", 123); // 函数形参类型固定 函数指针
//SetVariableByFunPtr(SetVariable, "Score: ", 129.98); // 函数形参类型固定 129.98被截断成129,调用情况同上
SetVariableByTemplatePtr(SetVariable, "Score: ", 109.98); // 函数形参类型不固定 模板指针,109.98不会截断。 return 0;
}

  

template指针小测试的更多相关文章

  1. Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试

    CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...

  2. python 程序小测试

    python 程序小测试 对之前写的程序做简单的小测试 ... # -*- encoding:utf-8 -*- ''' 对所写程序做简单的测试 @author: bpf ''' def GameOv ...

  3. PHP中使用PDO操作事务的一些小测试

    关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...

  4. HTTP性能小测试

    一直说node.js如何如何好,就来测试一下吧~~ 首先接受一个小工具 Apache Bench简称ab 可以用来测试http性能 利用Apache Bench测试Web引擎性能关于此工具的详细介绍参 ...

  5. mysql注入小测试

    转自:http://www.jb51.net/article/46163.htm 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏 ...

  6. 2014.3.12-C语言小测试

    测试代码: 学号:1402049 1.请实现一个函数,功能为使用循环输出以下的图案 void print_alpha(int n) { int i, j; for(i=0;i<n;++i){ f ...

  7. SpringMvc拦截器小测试

    前言 俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题.小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作 ...

  8. 曲演杂坛--Update的小测试

    今天偶然想起一个UPDATE相关的小问题,正常情况下,如果我们将UPDATE改写成与之对应的SELECT语句,其SELECT查询结果应与UPDATE的目标表存在一对一的关系,例如: 对于UPDATE语 ...

  9. 小测试整理(含T1 T2)

    这次测试规模较小,前两题也较水,但需要整理 T1(Jelly的男♂难题1): 从一个点出发,以四连通的方式扩散,可以走#,不能走o,走过的格子每单位时间会增加1点高度,问扩散完整间屋子需要的时间,以及 ...

随机推荐

  1. go语言设计模式之template

    template.go package template import ( "strings" ) type MessageRetriever interface { Messag ...

  2. 201871010114-李岩松《面向对象程序设计(java)》第十六周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  3. 大数据量数据库设计与优化方案(SQL优化)

    转自:http://blog.sina.com.cn/s/blog_6c0541d50102wxen.html 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的 ...

  4. mac--“-bash: brew: command not found”,怎么解决?

    报错 “-bash: brew: command not found” 执行下面命令,安装HomeBrew ruby -e "$(curl -fsSL https://raw.githubu ...

  5. Mybatis关联查询之二

    Mybatis关联查询之多对多 多对多 一.entity实体类 public class Student { private Integer stuid; private String stuname ...

  6. 使用rsync基于ssh免密登陆进行备份或目录同步

    日常工作中有很多的备份工作,rsync是一个很不错的工具,尝试使用基于ssh免密登陆的方式进行备份,测试成功,是可行且方便的方法,撰文记之,以备后用: 1.A主机root用户对B主机root用户做ss ...

  7. app自动化测试环境搭建之node+appium+ADT+MUMU模拟器

    一.安装Microsoft .NET Framework 4.5 检测本机已安装的程序中,是否已经安装Microsoft .NET Framework 4.5及以上的版本 如果没有安装,则获取安装文件 ...

  8. swoole中http_server的配置与使用

    swoole中为我们提供了一个swoole_http_server类,方便我们处理http请求. 但是它对http协议的支持并不完整,所以一般建议在前面加一层nginx进行代理,对于php文件的处理交 ...

  9. [IDA]批量载入结构体

    我们之前介绍了如果单独定义一个C结构体并转换为IDA中的结构体. 但是,在内核中有很多庞大的结构体,一环接着一环,手动导入不现实. 还存在一个问题,可能大小格式不匹配. 之前有一位老哥推荐我一个工具: ...

  10. centos 7 搭建Samba

    一.Samba简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,由客户端和服务端构成. SMB(Server Message Block的缩写,即服务器消息块)主要是作 ...