石家庄企业网站建设桥拓云智能建站
石家庄企业网站建设,桥拓云智能建站,wordpress 微信商城模板,许昌seo推广http://www.cnblogs.com/shootingstars/archive/2008/11/14/860042.html 以前使用bind1st以及bind2nd很少#xff0c;后来发现这两个函数还挺好玩的#xff0c;于是关心上了。在C Primer对于bind函数的描述如下#xff1a;“绑定器binder通过把二元函数对象的一个实参绑定到…http://www.cnblogs.com/shootingstars/archive/2008/11/14/860042.html 以前使用bind1st以及bind2nd很少后来发现这两个函数还挺好玩的于是关心上了。在C Primer对于bind函数的描述如下“绑定器binder通过把二元函数对象的一个实参绑定到一个特殊的值上将其转换成一元函数对象C标准库提供了两种预定义的binder 适配器bind1st 和bind2nd 正如你所预料的bind1st 把值绑定到二元函数对象的第一个实参上bind2nd 把值绑定在第二个实参上例如为了计数容器中所有小于或等于10 的元素的个数我们可以这样向count_if()传递count_if( vec.begin(), vec.end(), bind2nd( less_equalint(), 10 ));”哦这倒是挺有意思的。于是依葫芦画瓢 boolprint(inti, intj) { std::couti ---j std::endl; returnij;}intmain(intargc, char*argv[]){ (std::bind1st(print, 2))(1); return0;} 满怀希望它能够打印2---1只不过。。。编译出错1 Error error C2784: std::binder1st_Fn2 std::bind1st(const _Fn2 ,const _Ty ) : could not deduce template argument for overloaded function type from overloaded function type ---不能够推断出模板参数for overloaded function type from overloaded function type 。。。。还真看不明白。。。于是直接看bind1st代码 templateclass_Fn2, class_Tyinline binder1st_Fn2bind1st(const_Fn2_Func, const_Ty_Left) { typename _Fn2::first_argument_type _Val(_Left); return(std::binder1st_Fn2(_Func, _Val)); } 嗯。。。在代码里typename _Fn2::first_argument_type _Val(_Left)说必须定义first_argument_type类型可是我一个函数哪里来的这个类型定义嗯STL一定提供了某种东东用来自动定义这个类型。找啊找于是找到了ptr_fun。这个函数自动将一个函数指针转换为一个binary_function的继承类pointer_to_binary_function而在binary_function中定义了first_argument_type。于是修改代码 intmain(intargc, char*argv[]){ (std::bind1st(std::ptr_fun(print), 2))(1); return0;} 打印结果如下2---1转载于:https://www.cnblogs.com/johnnyflute/p/3714201.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88087.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!