函数包装器,函数私有类处理
1、函数包装器
#include<iostream>
#include<functional>
//函数包装器
//第一,设计执行接口,接口设计关卡(),计数
//第二,函数包装器依赖于函数模板,实现通用泛型
//第三,函数代码可以内嵌在另外一个函数,实现函数怀孕
//函数包装器,用于管理内嵌函数,外部函数调用
//函数包装器, T数据类型, F是函数
template<typename T, typename F>
T run(T v, F f)
{
static int count = 0;
count++;//计数器
std::cout << "run 一个参数的包装器 执行" << count << "次" << std::endl;
if (count > 1)
{
T vx(0);
return vx;
}
return f(v);//函数传入参数
}
template<typename T, typename F>
T run(T v1, T v2, F f)
{
return f(v1, v2);//函数传入参数
}
int cheng(int a, int b)
{
return a*b;
}
void main()
{
using std::cout; //C++11. namespace,专门引用一个关键字,不需要std
using std::endl;
using std::function;
//using namespace std;
using std::cin;
double db = 12.9;//double *2
int num1 = 19;
int num2 = 29;
//第一个double是返回值类型,第二个参数类型是参数类型
function<double(double)> fun1 = [](double u)
{
return u * 2;
};
function<double(double)> fun2 = [](double u)
{
return u*u;
};
function<int(int, int)> fun3 = [](int u1, int u2)
{
return u1 + u2;
};
function<int(int, int)> fun4 = cheng; //fun4函数指针
cout << run(db, fun1) << endl;//调用
cout << run(db, fun2) << endl;//调用
cout << run(num1, num2, fun3) << endl;//调用
cout << run(num1, num2, fun4) << endl;//调用
cin.get();//等价于你输入一字符getchar;
}
运行结果:
2.处理类的私有
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
//函数模板实现通用,可以根据自有数据类型,进行优化
//结构体可以直接赋值(没有私有变量)
//所有成员都是公有的类型可以赋值(一开始初始化)
//如果类有私有成员变量,不可以用{}初始化
//类的对象之间默认是可以直接赋值
//类,结构体都有一个默认赋值操作= 浅拷贝 ,交换数据
//深拷贝用的最多,函数模板的覆盖
class info
{
public:
char name[40];
char *p;
int data;
private:
int num;
public:
void set(int X)
{
this->num = X;//通过接口设置私有变量
}
int get()
{
return this->num;//返回值,副本机制
}
};
template<typename T>
void swap(T &a, T &b)
{
std::cout << "通用函数模板" << std::endl;
T temp = a;
a = b;
b = temp;//交换两个变量
}
//模板为空,明确类型,
template<>
void swap(info &info1, info &info2)
{
std::cout << "特有函数模板" << std::endl;
//通用模板可以实现通用,针对自己的数据类型做出优化
//计数器,对象交换计数器
info temp = info1;
info1 = info2;
info2 = temp;
}
void main()
{
info info1;
info info2;
std::strcpy(info1.name, "yincheng");
std::strcpy(info2.name, "chengyin ");
info1.data = 102;
info2.data = 201;//初始化
info1.p = new char[10];
std::strcpy(info1.p, "魔王");
//info2.p = nullptr;//C++的空指针
info2.p = new char[100];
std::strcpy(info2.p, "da魔王");
info1.set(89);
info2.set(98);
swap(info1, info2);
std::cout << info1.name << " " << info1.data << " " << info1.get() << std::endl;
std::cout << info1.p << std::endl;
std::cout << info2.name << " " << info2.data << " " << info2.get() << std::endl;
std::cout << info2.p << std::endl;
std::cin.get();
}
运行截图
函数包装器,函数私有类处理相关推荐
- cocos2d-x学习笔记 动作 CCCallFunc家族(回调函数包装器)
CCCallFunc是CCActionInstant的子类,是非常重要的一个类族,就是适配器.用大白话说,就是做了一层包装,把函数包装成动作,这样你在执行动作的时候,就可以执行函数了.听起来很怪异吗? ...
- 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器
1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...
- python装饰器函数-python装饰器1:函数装饰器详解
先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了 ...
- python装饰器函数-Python函数装饰器指南
Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...
- python函数修饰器_Python函数装饰器指南
Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...
- python基础教程:函数装饰器详解
谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了一个函数fu ...
- ssl- 套接字对象的TLS / SSL包装器
目录 ssl - 套接字对象的TLS / SSL包装器 函数,常量和异常 套接字创建 上下文创建 例外 随机生成 证书处理 常量 SSL套接字 SSL上下文 证书 证书链 CA证书 组合密钥和证书 自 ...
- php注册变量函数,PHP变量函数
介绍 如果变量名称的前面带有括号(带有或不带有参数),则PHP解析器将尝试查找名称与变量值相对应的函数并执行该函数.这样的函数称为可变函数.此功能在实现回调,函数表等时很有用. 不能使用诸如inclu ...
- 【C++11】包装器
目录 一.function包装器 1.1 介绍 1.2 使用 1.3 function包装器的意义 1.3 function包装器的一个例子 二.bind包装器 2.1 介绍 2.2 使用 2.3 b ...
最新文章
- 基于JQUERY使用FLASH的AJAX上传进度条插件uploadify
- a站手机访问电脑版_公司电脑一键变网盘,支持手机、家里电脑远程访问
- How is navigation target url request handled by backend
- 二.java下使用RabbitMQ实现hello world
- frame或者iframe的contentwindow属性
- centos下python编程工具_CentOS下python的下载及安装
- (47)FPGA面试题LATCH和DFF的区别
- 单元格内多个姓名拆分成一列_把订单按货品拆分成多行
- ga设置迭代次数_种群进化+邻域搜索的混合算法(GA+TS)求解柔性作业车间调度问题(FJSP)算法介绍...
- 正则提取 html 里input 标记的value 值
- python开发环境有哪些_python开发环境哪个好用?如何搭建?
- 关于超星脚本出现乱码问题
- 2022 Android 进阶学习RoadMap
- Kubernetes 在知乎上的应用
- 董明珠称格力宁可降工资也不裁员;阿里发布财年第四季度及全年财报
- Word 2003域应用完全手册
- 老板要如何去激励自己的员工?
- MPAndroidChart的详细使用——BarChart叠状条形图(四)
- 计算机助理职称考试成绩查询,初级成绩可以查询了!
- python中求最小公约数,python求最大公约数和最小公倍数的简单方法
热门文章
- 广度优先搜索算法BFS讲解以及python 实现
- wxWidgets:wxCursor类用法
- wxWidgets:制作渲染循环
- boost::units模块实现展示信息单元系统
- boost::type_erasure模块construction相关的测试程序
- boost::metaparse::v1::impl::empty_string相关用法的测试程序
- boost::hana::maybe用法的测试程序
- boost::geometry::azimuth用法的测试程序
- boost::container模块实现vector选项
- ITK:在图像区域上运行图像过滤器