测试结论:

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. 对于Python语音性能的一些个人见解

    虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚 ...

  2. div里面的元素垂直均匀分布 按钮引发地址栏出现问号 判断一个数组是否为空 div底部居中 路由传参接受参数

    一个固定高度的div的子元素 在垂直 方向上平均分布 .important-dec{ height: 121px; flex-direction: column; display: flex; jus ...

  3. python包matplotlib绘制图像

    使用matplotlib绘制图像 import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator impor ...

  4. 【zabbix告警配置】zabbix服务配置邮件告警

    一.安装邮件服务 在zabbix_server服务端安装邮件和邮件发送服务,这里可以参考我另一篇邮件服务部署文章:https://www.cnblogs.com/HeiDi-BoKe/p/118833 ...

  5. wp.editor.initialize 配置案例

    wp.editor.initialize ( 'EditorTextArea' , { tinymce: { wpautop: to true , theme: 'modern' , skin: 'l ...

  6. 黄聪:wordpress调试过程只显示500错误,不显示错误内容

    在functions.php文件添加如下代码: add_filter('wp_die_handler', 'get_my_custom_die_handler'); function get_my_c ...

  7. vue项目中引入iconfont

    背景 对于前端而言,图标的发展可谓日新月异.从img标签,到雪碧图,再到字体图标,svg,甚至svg也有了类似于雪碧图的方案svg-sprite-loader.雪碧图没有什么好讲的了,只是简单地利用了 ...

  8. python基础(5):格式化输出、基本运算符、编码问题

    1. 格式化输出 现在有以下需求,让⽤户输入name, age, job,hobby 然后输出如下所⽰: ------------ info of Alex Li ----------- Name : ...

  9. MySQL学习——约束

    MySQL学习——约束 摘要:本文主要学习了数据库的约束. primary key(主键) 定义 主键约束是一个列或者多个列,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可以强制 ...

  10. xml解析-jaxp删除结点

    jaxp删除结点 / 删除sex结点 * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * * 4.得到sex结点 * 5.得到sex的父节点 getP ...