当前位置: 首页 > news >正文

网页制作网站受众群体分析优化型网站是模板

网页制作网站受众群体分析,优化型网站是模板,网络优化工程师有前途吗,如何在网上推广项目使用前&#xff0c;包头文件&#xff1a;#include <functional> std::function 是 C标准库 中的一个通用函数包装器&#xff1b; 它可以储存、复制、调用任何可调用的对象&#xff0c;包括&#xff1a;函数指针、成员函数、绑定的成员函数、lambda表达式、仿函数等。 1…

使用前,包头文件:#include <functional>

std::function 是 C++标准库 中的一个通用函数包装器

它可以储存、复制、调用任何可调用的对象,包括:函数指针成员函数、绑定的成员函数、lambda表达式仿函数等。

1. function 的模板原型
#include <functional>function<Ret(Args...)> 
// Ret 是被调用函数的返回值类型
// Args... 是被调用函数的形参

举一个函数指针的例子讲解:

int fun(int a, int b) {return a + b;
}int main() {function<int(int, int)> func1 = fun; // 此处的 fun 本质是 fun() 的函数指针,与 &fun 无差别// <int(, )> : int 为被调用函数的返回值类型// (int, int) : 为被调用函数的形参return 0;
}
2. function 的几种使用方法
2.1 函数指针

上面的例子已经展示过了。

2.2 成员函数
class Plus
{
public:static int Plusi(int a, int b) // 静态成员函数{return a + b;}double Plusd(double a, double b) // 非静态成员函数{return a + b;}
};int main()
{function<int(int, int)> func2 = &Plus::Plusi;cout << func2(1, 1) << endl;// 非静态成员函数,第一个参数为隐藏的 this 指针function<double(Plus, double, double)> func3 = &Plus::Plusd; cout << func3(Plus(), 1.1, 2.2) << endl;return 0;
}
2.3 lambda 表达式
int main() 
{function<int(int, int)> func4 = [](int a, int b) { return a + b; };return 0;
}
2.4 仿函数
struct Fun {int operator()(int a, int b) {return a + b;}
};int main()
{function<int(int, int)> func5 = Fun();return 0;
}
3. 包装器解决模板效率低下的问题

将下面的代码运行起来,观察 useF() 模板被实例化成了几份?

template<class F, class T>
auto useF(F f, T x) // 实际场景中不建议用 auto 推导返回值类型
{static int count = 0;cout << "count: " << ++count << endl;cout << "count: " << &count << endl;return f(x);
}double f(double x)
{return x / 2;
}struct Fun
{double operator()(double x){return x / 3;}
};int main()
{auto f1 = [](double x) { return x / 4; };cout << useF(f1, 11.11) << endl;cout << useF(f, 11.11) << endl;cout << useF(Fun(), 11.11) << endl;return 0;
}

从运行结果中可以看出, count 始终为 1 且每一个 count 的地址都不相同。事实上,useF() 被实例化成了三份。

我们可以利用包装器解决模板效率低下的问题。

	function<double(double)> func1 = f1;cout << useF(func1, 11.11) << endl << endl;function<double(double)> func2 = f;cout << useF(func2, 11.11) << endl << endl;function<double(double)> func3 = Fun();cout << useF(func2, 11.11) << endl << endl;

为什么通过 std::function 包装后,useF() 只会实例化出一份呢?

不妨通过 typeid 观察 func1、func2、func3 的类型。

http://www.yayakq.cn/news/804912/

相关文章:

  • 寻找网站建设员江苏省昆山市网站制作
  • wordpress建网站的优点软件营销网站
  • 天津城市建设管理职业学院网站免费工作总结ppt模板下载
  • 兰州网站seo收费标准广州seo优化外包服务
  • 洛阳洛龙区网站建设做商城网站应该用什么程序
  • 青岛市黄岛区网站建设oa管理系统软件
  • aspnet网站开发实例教程课件企业专业网站设计公
  • 潮州建设网站中信建设有限责任公司招标
  • 网站打不开是为什么wordpress官方安装主题
  • 网站宣传的劣势红色网站 推荐
  • 分类信息网站如何做优化宁波seo搜索引擎优化公司
  • 上海免费推广网站有哪些wordpress挂下载链接
  • 义乌企业网站搭建首选南宁做网站在哪了
  • 口碑营销理论网络网站推广首荐乐云seo
  • 做管理信息的网站数据系统网站建设必要性
  • 企业网站营销的优缺点移动商城网站建设
  • 门户网站采用较多的模式是微信网站搭建价格
  • 我要做网站做网站临泉连锁门店管理系统
  • 嘉兴网站优化联系方式传媒公司运营是干嘛的
  • 网站建设需要的网络技术wordpress按时间获取文章列表
  • 网站必须要实名认证么qq推广功能在哪开
  • 想学做网站报班wordpress前台后台都空白
  • 网站域名服务器查询云南网站建设公司前十名
  • 不备案网站北京营销型网站开发
  • 织梦网站提示保存目录数据时报一个vps可以建多少网站
  • 网站搭建图片南充城市建设投诉网站
  • 做网站网站庄家成都小程序建设廴成都柚米
  • 济南产品网站建设外包杭州公司vi设计
  • 品牌宝正式推出免费个人网站认证烟台网站排行榜
  • dw做的网站能直接使用吗游戏网站设计模板