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();

}

运行截图

函数包装器,函数私有类处理相关推荐

  1. cocos2d-x学习笔记 动作 CCCallFunc家族(回调函数包装器)

    CCCallFunc是CCActionInstant的子类,是非常重要的一个类族,就是适配器.用大白话说,就是做了一层包装,把函数包装成动作,这样你在执行动作的时候,就可以执行函数了.听起来很怪异吗? ...

  2. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

  3. python装饰器函数-python装饰器1:函数装饰器详解

    先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了 ...

  4. python装饰器函数-Python函数装饰器指南

    Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...

  5. python函数修饰器_Python函数装饰器指南

    Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...

  6. python基础教程:函数装饰器详解

    谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了一个函数fu ...

  7. ssl- 套接字对象的TLS / SSL包装器

    目录 ssl - 套接字对象的TLS / SSL包装器 函数,常量和异常 套接字创建 上下文创建 例外 随机生成 证书处理 常量 SSL套接字 SSL上下文 证书 证书链 CA证书 组合密钥和证书 自 ...

  8. php注册变量函数,PHP变量函数

    介绍 如果变量名称的前面带有括号(带有或不带有参数),则PHP解析器将尝试查找名称与变量值相对应的函数并执行该函数.这样的函数称为可变函数.此功能在实现回调,函数表等时很有用. 不能使用诸如inclu ...

  9. 【C++11】包装器

    目录 一.function包装器 1.1 介绍 1.2 使用 1.3 function包装器的意义 1.3 function包装器的一个例子 二.bind包装器 2.1 介绍 2.2 使用 2.3 b ...

最新文章

  1. 基于JQUERY使用FLASH的AJAX上传进度条插件uploadify
  2. a站手机访问电脑版_公司电脑一键变网盘,支持手机、家里电脑远程访问
  3. How is navigation target url request handled by backend
  4. 二.java下使用RabbitMQ实现hello world
  5. frame或者iframe的contentwindow属性
  6. centos下python编程工具_CentOS下python的下载及安装
  7. (47)FPGA面试题LATCH和DFF的区别
  8. 单元格内多个姓名拆分成一列_把订单按货品拆分成多行
  9. ga设置迭代次数_种群进化+邻域搜索的混合算法(GA+TS)求解柔性作业车间调度问题(FJSP)算法介绍...
  10. 正则提取 html 里input 标记的value 值
  11. python开发环境有哪些_python开发环境哪个好用?如何搭建?
  12. 关于超星脚本出现乱码问题
  13. 2022 Android 进阶学习RoadMap
  14. Kubernetes 在知乎上的应用
  15. 董明珠称格力宁可降工资也不裁员;阿里发布财年第四季度及全年财报
  16. Word 2003域应用完全手册
  17. 老板要如何去激励自己的员工?
  18. MPAndroidChart的详细使用——BarChart叠状条形图(四)
  19. 计算机助理职称考试成绩查询,初级成绩可以查询了!
  20. python中求最小公约数,python求最大公约数和最小公倍数的简单方法

热门文章

  1. 广度优先搜索算法BFS讲解以及python 实现
  2. wxWidgets:wxCursor类用法
  3. wxWidgets:制作渲染循环
  4. boost::units模块实现展示信息单元系统
  5. boost::type_erasure模块construction相关的测试程序
  6. boost::metaparse::v1::impl::empty_string相关用法的测试程序
  7. boost::hana::maybe用法的测试程序
  8. boost::geometry::azimuth用法的测试程序
  9. boost::container模块实现vector选项
  10. ITK:在图像区域上运行图像过滤器