std::function是一个类模板,也是一个包装器。std::function可以包装存储其他可以调用的对象,比如函数指针、仿函数对象、lambda、bind表达式等等,存储的可调用对象被称为std::function的目标,如果std::function没有目标,那么就说这个std::function是空的。在调用空std::function的目标时会导致抛出异常。std::function被包含在
这里需要注意的是,function包装的是可调用的对象,在保证某个类的普通成员函数时,首先要指定类域并且在前面加上&才能获取到地址,同时类的普通成员变量有一个隐式的第一个参数 this指针,在使用function包装时要写上,绑定的时候传对象或者对象指针都可以,不然会发生类型不匹配的问题。在包装类的静态成员函数时也要指定类域并且在前面加上&才能获取到地址,但是静态成员函数没有this指针,所以不需要加那个对象或者对象指针的参数。
bind是一个函数模板,它也是一个可调用对象的包装器,可以把他看作是一个函数适配器,也可以接收function的对象进行处理后返回一个可调用对象。bind还可以用来调整参数的个数和顺序。bind 也在
调⽤bind的⼀般形式: auto newCallable = bind(callable,arg_list); 其中newCallable本⾝是⼀个可调⽤对象,arg_list是⼀个逗号分隔的参数列表,对应给定的callable的参数。当我们调用newCallable时,newCallable会调⽤callable,并传给它arg_list中的参数。
arg_list中的参数可能包含形如_n的名字,其中n是⼀个整数,这些参数是占位符,表⽰ newCallable的参数,它们占据了传递给newCallable的参数的位置。数值n表⽰⽣成的可调⽤对象 中参数的位置:_1为newCallable的第⼀个参数,_2为第⼆个参数,以此类推。_1/_2/_3....这些占 位符放到placeholders的⼀个命名空间中。
这里有一个有一个使用技巧,那就是用bind包装function,前面在说function包装一个类的普通成员函数的时候需要在第一个参数的位置传入这个对象或者对象的指针,在调用的时候就会很别扭,我们可以用bind在这里把第一个参数写死了,以后在调用的时候就像一个仿函数的调用形式了。
智能指针是一块比较大的内容,后续会单独再写一篇博客专门讲智能指针。
到此这篇autokey(auto可以说明全局变量吗)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/51715.html