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

扮家家室内设计平台东莞seo优化案例

扮家家室内设计平台,东莞seo优化案例,wordpress主题begin,一站式做网站哪家好目录 简介std::functionstd::function对象包装器std::function做回调函数 std::bind绑定器bind绑定普通函数bind绑定成员函数 简介 C11新增了std::function和std::bind。用于函数的包装以及参数的绑定。可以替代一些函数指针,回调函数的场景。 std::function std…

目录

  • 简介
  • std::function
    • std::function对象包装器
    • std::function做回调函数
  • std::bind绑定器
    • bind绑定普通函数
    • bind绑定成员函数

简介

C++11新增了std::function和std::bind。用于函数的包装以及参数的绑定。可以替代一些函数指针回调函数的场景。

std::function

std::function对象包装器

std::function是可调用对象的包装器,它可以用来用统一的方式来处理函数、函数对象、函数指针,并允许保存和延迟执行它们。比较难理解,可以从代码上深入:

#include <iostream>
#include <functional>void func(void)
{std::cout << __FUNCTION__ << std::endl;
}class Foo
{
public:static int foo_func(int a){std::cout << __FUNCTION__ << " :input param:" << a << std::endl;return a;}
};
class Bar
{
public:int operator()(int a){std::cout << __FUNCTION__ << " :input param:" <<a<< std::endl;//return a;}
};
int main()
{std::function<void(void)> fr1 = func;//绑定普通函数fr1();std::function<int(int)> fr2 = Foo::foo_func;//绑定一个类的静态成员函数std::cout << "result:"<< fr2(123) << std::endl;Bar bar;std::function<int(int)> fr3 = bar;//绑定一个仿函数//fr2 = bar;//这里用fr2也可以,因为这两个函数的返回值和参数表是一样的std::cout << "result" <<fr3(123) << std::endl;return 0;
}

注意:代码中__FUNCTION__是预定义标识符,基本功能是实现返回所在函数的名字,便于调试日志打印。

运行结果:
在这里插入图片描述
可以看出使用给std::function赋值上对应的函数返回值和函数参数表,它就可以容纳这一类调用方式的函数,被称为“函数包装器”。如上述的fr2可以容纳Foo::foo_func和bar。
这里可以看出function类似于函数指针的作用,可以保存各种类型的函数地址。

std::function做回调函数

#include <iostream>
#include <functional>class A
{std::function<void(int)> callback_;
public:A(const std::function<void(int)>& f) : callback_(f) {}void notify(int a){callback_(a);}
};
class Foo
{
public:void operator()(int a){std::cout << __FUNCTION__  <<" a:" << a << std::endl;}
};
int main()
{Foo foo;A aa(foo);aa.notify(111);return 0;
}

这里可以看出function可以取代函数指针的作用,可以用function保存函数延迟执行,所有比较适合用在回调函数场景。

std::bind绑定器

std::bind可以将可调用对象和其参数一起绑定,绑定后的结果可以用std::function进行保存。
其中绑定普通函数和绑定成员函数的写法有所不同。

bind绑定普通函数

#include <iostream>
#include <functional>void input(int x)
{std::cout << x << std::endl;
}int main()
{std::function<void(int)> fr = std::bind(input, std::placeholders::_1);auto fr1 = std::bind(input, std::placeholders::_1);//这里用auto接收也行fr(2);fr1(3);return 0;
}

其中std::placeholders::_1是一个占位符,表示这个位置将在函数调用时,被传入的第一个参数替代。

占位符的使用方法

#include <iostream>
#include <functional>void input(int x, int y)
{std::cout << x << " " << y << std::endl;
}int main()
{std::function<void(int, int)> fr = std::bind(input, std::placeholders::_1, 2);//这里用auto接收也行fr(4, 5);//4 2fr = std::bind(input, 2, std::placeholders::_1);fr(4, 5);//2 4fr = std::bind(input, std::placeholders::_1, std::placeholders::_2);fr(4, 5);//4 5fr = std::bind(input, std::placeholders::_2, 2);fr(4, 5);//5 2fr = std::bind(input, 2, std::placeholders::_2);fr(4, 5);//2 5return 0;
}

结果:
在这里插入图片描述
在绑定参数时,可以通过占位符std::placeholders来决定空位参数会属于调用发生时的第几个参数。

bind绑定成员函数

bind可以绑定成员函数和成员变量。其中绑定成员函数和绑定普通函数时是有一些差别的。

#include <iostream>
#include <functional>class MyClass {
public:int i_ = 0;void foo(int a, int b) {std::cout << a << " " << b << std::endl;}
};int main() {MyClass obj;auto boundFunc = std::bind(&MyClass::foo, &obj, std::placeholders::_1, std::placeholders::_2);//绑定成员函数boundFunc(3, 4);auto fr_i = std::bind(&MyClass::i_, &obj);//绑定成员变量fr_i() = 123;return 0;
}

当使用 std::bind 绑定成员函数时,需要注意以下几点:

  • 需要使用成员函数的指针或函数对象来进行绑定。对于指针,需要使用 & 取址符号获取成员函数的地址。
  • 需要提供对象的指针(或引用)作为第一个参数,以便在调用时正确地调用成员函数。

可以看到绑定普通函数时是不需要提供对象的指针或引用作为参数。

http://www.mmbaike.com/news/25015.html

相关文章:

  • 电子商务80gb的流量网站够用吗石家庄网络关键词排名
  • 电子商务网站建设步骤外贸展示型网站建设公司
  • 潍坊网站排名公司免费网站搭建平台
  • 做网站 郑州公司有哪些千锋教育官方网
  • 怎么做电影网站不违法吗上海今天最新新闻10条
  • 网页制作素材按钮靠谱seo整站优化外包
  • 免费css网站网站seo标题是什么意思
  • 百色网站建设互联网广告价格
  • 东莞商城网站建设公司如何提高网站的搜索排名
  • 做算命类网站违法吗百度提问登录入口
  • 安平做网站做推广电话教你如何快速建站
  • 湖南网站推广多少钱关键词排名推广软件
  • 男女宾馆做爰视频网站关键词排名优化易下拉技术
  • 网站没有收录从哪开始做优化宁德市委书记
  • 做网站可以用什么主题链接生成二维码
  • 郑州免费网站建设游戏推广员
  • 网店代运营公司哪家强北京seo优化推广
  • 我自己做网站百度自动点击器
  • 北京市网站建设创建网站的基本步骤
  • 宁波网络优化seo报价南宁网站seo外包
  • 网站制作技术人员搜狗搜索引擎优化
  • 委托别人做网站侵权了重庆网站seo好不好
  • 网站首页关键词如何优化提交链接
  • 做美妆批发的网站网页首页设计图片
  • WordPress_postsseo自然优化排名
  • 有人做彩票网站吗百度公司全称
  • 住房和城乡建设部网站公布信息seo引擎优化教程
  • 怎么做电商网站推广湖南百度seo
  • 村官 举措 村级网站建设个人网站设计毕业论文
  • 广东省住房和城乡建设厅网站沈阳网站制作推广