首页 > 编程知识 正文

validate函数(bind函数返回值)

时间:2023-05-06 09:25:51 阅读:77137 作者:252

bind函数在头文件functional中定义。 可以将bind函数视为通用函数适配器,它接受可调用对象并生成新的可调用对象以“适应”原始对象的参数列表。

bind函数:接受函数名称作为参数,并生成新函数。

autonewcallable=bind (呼叫球,arg_list );

arg_list的参数可能包括_1、_2等。 这些是新函数newCallable的参数。

在该博客lambda表达式的介绍中,讨论了find_if的第三个参数问题。 当时用lambda公式解决,如果有bind函数,bind函数也可以解决。

解决方案: bind (检查_ size,_1,sz ) ) ) ) ) ) ) ) ) )。

autoidx=find_if(svec.begin (,svec.end ),bind ) check_size,_ 1,6 );

实际上,newCall=bind(check_size,_1,sz )返回了新函数newCall。 此newcall只接受一个参数,正好满足find_if的要求。

从find_if来看,啊,newCall是包含一个参数的函数。 OK,没问题。

从编程猴子来看,check_size是一个包含两个参数的函数,只是将SZ(6)预先绑定到newCall。

调用newCall(s )时,实际上调用check_size(s ) s,6 )。 newcall也有两个参数,但第二个参数有默认值6。 新呼叫(conststrings,size_t sz=6); 因此,调用newCall时,传递参数就足够了。

注意: _1、_2等位于命名空间placeholder中,因此使用:

//_1,_n已确定为std:placeholders

usingnamespacestd :3360 placeholder s;

使用bind参数:

//g是具有两个参数的可调用对象

autog=bind(func,a,b,_2,c,_1); //func是一个有五个参数的函数

调用g(x,y )将等于func(a ) a、b、y、c、x

示例:

#包含

#包含

#包含

#包含

#包含

用户命名空间STD;

//_1,_n已确定为std:placeholders

usingnamespacestd :3360 placeholder s;

OOLcheck_size(conststrings,string:size_type sz ) )。

returns.size(=SZ;

}

ool shorter (常数字符串,常数字符串b ) )。

return a.size () b.size );

}

ostreamprint(ostreamOS,const string s,const char c )。

//c=',';

返回操作系统Sc;

}

int main () )。

/*

用bind实现了与lambda相同的功能

vector svec{'aab '、' d '、' aa '、' bb '、' e '、' bbb'};

stable_sort(svec.begin ),svec.end ),[ (常数字符串,常数字符串b ) )。

return a.size () b.size );

);

string:size_type sz=3;

autoidx=find_if(svec.begin (,svec.end ),bind ) check_size,_1,sz );

cout *idx endl;

idx=find_if(svec.begin (,svec.end ),[SZ] ) conststrings ) )

returns.size(=SZ;

);

cout *idx endl;

*/

/*

用bind改变原始函数的参数位置

//升序

vector svec{'aab '、' d '、' aa '、' bb '、' e '、' bbb'};

sort(svec.Begin )、svec.end )和shorter );

自动常数: svec (for ) {

cout s ' ';

}

cout endl;

由于调换了shorter参数的位置,所以变为降序

sort(svec.begin )、svec.end )、bind ) shorter、_2、_1);

自动常数: svec (for ) {

cout s ' ';

}

cout endl;

*/

//bind引用必须使用ref或cref函数将对象转换为引用,不能使用

ostream os=cout;

常数char c=' ';

vector svec{'aab '、' d '、' aa '、' bb '、' e '、' bbb'};

for_each(svec.begin )、svec.end )、[os,c ] (conststrings ) ) ) ) ) )。

OSc;

);

操作系统结束;

for_each(svec.begin )、svec.end )、bind (打印)、ref(OS )、_1、cref(c )、c );

操作系统结束;

cout c endl;

}

总结

以上是小编介绍的c/c标准库bind函数的详细内容。 希望对大家有帮助。 如果有问题的话请发表评论。 小编马上回复大家。 在此也感谢您对脚本房屋网站的支持!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。