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点高度,问扩散完整间屋子需要的时间,以及 ...
随机推荐
- linux 软件包的组成部分
软件包的组成部分 1. 二进制文件 比如:/bin, /sbin & /usr/bin, /usr/sbin & /usr/local/bin, /usr/local/sbin 2.库 ...
- AcWing 166. 数独
题目地址 https://www.acwing.com/problem/content/description/168/ 题目描述 数独是一种传统益智游戏,你需要把一个9 × 9的数独补充完整,使得图 ...
- poj 3233 矩阵快速幂
地址 http://poj.org/problem?id=3233 大意是n维数组 最多k次方 结果模m的相加和是多少 Given a n × n matrix A and a positive i ...
- 详解C++ STL map 容器
详解C++ STL map 容器 本篇随笔简单讲解一下\(C++STL\)中的\(map\)容器的使用方法和使用技巧. map容器的概念 \(map\)的英语释义是"地图",但\( ...
- OpenDaylight开发hello-world项目之代码框架搭建
OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码 ...
- golang数据结构之插入排序
//InsertSort 插入排序 func InsertSort(arr *[]int) { ; i < len(arr); i++ { insertVal := (*arr)[i] inse ...
- File获取当前目录下的所有子项 listFiles()
package seday03; import java.io.File; /** * 获取一个目录中的所有子项 * @author xingsir */public class ListFilesD ...
- jquery中的ajax请求到php(学生笔记)
首先ajax的基本语法基础.(必须得引入一个jquery文件,下面的例子展示用了网上的jquery文件,要联网.) 2.请求成功(复制代码运行观察效果) <!DOCTYPE html> & ...
- java基础第十五篇之IO流和递归算法
FileInputStream : 输入流 int available() : 一次读取所有的字节数 read() : 将文件上的字节读取到内存的数组中 FileOutputStream : 输出流 ...
- 【微信小程序】e.currentTarget和e.target
什么是事件 事件是视图层到逻辑层的通讯方式. 事件可以将用户的行为反馈到逻辑层进行处理. 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数. 事件对象可以携带额外信息,如 id ...