template指针小测试
测试结论:
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指针小测试的更多相关文章
- Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试
CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...
- python 程序小测试
python 程序小测试 对之前写的程序做简单的小测试 ... # -*- encoding:utf-8 -*- ''' 对所写程序做简单的测试 @author: bpf ''' def GameOv ...
- PHP中使用PDO操作事务的一些小测试
关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...
- HTTP性能小测试
一直说node.js如何如何好,就来测试一下吧~~ 首先接受一个小工具 Apache Bench简称ab 可以用来测试http性能 利用Apache Bench测试Web引擎性能关于此工具的详细介绍参 ...
- mysql注入小测试
转自:http://www.jb51.net/article/46163.htm 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏 ...
- 2014.3.12-C语言小测试
测试代码: 学号:1402049 1.请实现一个函数,功能为使用循环输出以下的图案 void print_alpha(int n) { int i, j; for(i=0;i<n;++i){ f ...
- SpringMvc拦截器小测试
前言 俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题.小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作 ...
- 曲演杂坛--Update的小测试
今天偶然想起一个UPDATE相关的小问题,正常情况下,如果我们将UPDATE改写成与之对应的SELECT语句,其SELECT查询结果应与UPDATE的目标表存在一对一的关系,例如: 对于UPDATE语 ...
- 小测试整理(含T1 T2)
这次测试规模较小,前两题也较水,但需要整理 T1(Jelly的男♂难题1): 从一个点出发,以四连通的方式扩散,可以走#,不能走o,走过的格子每单位时间会增加1点高度,问扩散完整间屋子需要的时间,以及 ...
随机推荐
- 昨天周末晚上没有出去,码了一小段,先留着kangkang。
昨天周末晚上没有出去,码了一小段,先留着kangkang. import numpy as npimport matplotlibmatplotlib.use('Agg')import matplot ...
- [数组] Leetcode 189.旋转数组
- 一、itk在VS2019上面的安装 和例子(HelloWorld)运行
一.Itk简介 vtk是专门用于医疗图像处理的函数库,类似opencv. 这篇博客主要是讲解安装vtk之后的例子的运行,即如何构建自己的第一个ITK例子 二.Itk安装 Itk安装参考这篇博客: ht ...
- Linux 学习记录一(安装、基本文件操作).
Linux 名字的由来,是当时作者将初版的 Linux 发布在网上,供别人下载完善,而那个核心文件夹就叫 Linux,就这么叫着了.而为什么 Linux 的吉祥物是一只企鹅呢?是因为当时大家要发行稳定 ...
- saltstack--史上最细致安装攻略!亲测无坑
准备一台虚拟机node1: [root@linux-node1 pillar]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAS ...
- python--基础知识点梳理(一)数据类型、迭代生成装饰器、函数
可变数据类型和不可变数据类型有哪些? # 可变数据类型:列表.字典.集合 # 不可变数据类型:数字.元祖.字符串 常见数据结构 # 栈(stack)--先进后出. 队列(queue)-先进先出.链表( ...
- vim 下修改tab键为四个空格
最近在运行python的时候,发现tab键在在运行过程中无法使用,报错:IndentationError: unindent does not match any outer indentation ...
- jQuery 源码分析(十六) 事件系统模块 底层方法 详解
jQuery事件系统并没有将事件监听函数直接绑定到DOM元素上,而是基于数据缓存模块来管理监听函数的,事件模块代码有点多,我把它分为了三个部分:分底层方法.实例方法和便捷方法.ready事件来讲,好理 ...
- Java设计模式:Singleton(单例)模式
概念定义 Singleton(单例)模式是指在程序运行期间, 某些类只实例化一次,创建一个全局唯一对象.因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式. 单例 ...
- 记一次Python与C#的AES加密对接
前言 这几天做自动化测试的同事找到我,说是帮她看看有个AES加密的问题要怎么处理. 大概就是文档中贴了一段C#的AES加密代码,然后她要翻译成python的版本,去做一些测试相关的工作. 在我印象中, ...