bind函数,c++11里面的bind函数是什么鬼,看不懂,请高手指教
在这个信息爆炸的时代,了解bind函数和c++11里面的bind函数是什么鬼,看不懂,请高手指教的重要性不言而喻。本文将为您带来全面的解读,助您在这个领域中游刃有余。
C++ bind函数
bind是一组用于函数绑定的模板。在对某个函数进行绑定时,可以指定部分参数或全部参数,也可以不指定任何参数,还可以调整各个参数间的顺序。对于未指
定的参数,可以使用占位符_1、_2、_3来表示。-1表示绑定后的函数的第1个参数,_2表示绑定后的函数的第2个参数,其他依次类推。
bind可以绑定到普通函数、函数对象、类的成员函数和类的成员变量。先介绍最简单的这种试试理解。
普通函数
1 void nine_arguments(int i1,int i2,int i3,int i4,int i5,int i6,int i7,int i8,int i9);
int i1=1, i2=2, i3=3, i4=4, i5=5, i6=6, i7=7, i8=8, i9=9;
2bind(nine_arguments,_9,_2,_1,_6,_3,_8,_4,_5,_7(i1,i2,i3,i4,i5,i6,i7,i8,i9);
3bind(nine_arguments,i9,i2,i1,i6,i3,i8,_1,_2,_1)(i8,i9);
4bind(nine_arguments, i9,i2,i1,i6,i3,i8,i4,i5,i7)();
上述5个例子中:
1是普通函数形势
2是指,对1这个函数,我们更换其中参数的顺序,你看nine_arguments,_9,_2,_1,_6,_3,_8,_4,_5,_7,后面跟的第一个指定的占位符是9,所以意思是,对后面括号里的第一个参数i1,把他的值赋给原函数
void nine_arguments(int i1,int i2,int i3,int i4,int i5,int i6,int i7,int i8,int i9)
里的第9个参数,后面的依次对应。最终等价于调用函数nine_arguments(i3,i2,i5,i7,i8,i4,i9,i6,i1)
理解2的基础上,3等价于nine_arguments(i3,i2,i5,i7,i8,i4,i8,i9,i8)
应该是这样。。
c++11里面的bind函数是什么鬼,看不懂,请高手指教
std::bind
简单调用(1)
template<classFn,class...Args>
/*未指定*/bind(Fn&&fn,Args&&...args);
跟上返回值(2)
template<classRet,classFn,class...Args>
/*未指定*/bind(Fn&&fn,Args&&...args);
绑定(Bind)函数与参数的作用,
返回一个基于fn的函数对象,但是已经提前绑定了调用需要的参数。
调用这个函数对象相当于调用用绑定的参数调用fn。
下面给你一个使用例子吧:
//bind用例
#include<iostream>
#include<functional>
//自定义的一个函数
doublemy_divide(doublex,doubley){returnx/y;}
//自定义的一个结构体
structMyPair{
doublea,b;
doublemultiply(){returna*b;}
};
intmain(){
//这个using是为了使用_1,_2,_3,...
usingnamespacestd::placeholders;
//捆绑函数:
autofn_five=std::bind(my_divide,10,2);//返回10/2
std::cout<<fn_five()<<'\n';//输出5
autofn_half=std::bind(my_divide,_1,2);//返回x/2
std::cout<<fn_half(10)<<'\n';//输出5
autofn_invert=std::bind(my_divide,_2,_1);//返回y/x
std::cout<<fn_invert(10,2)<<'\n';//输出0.2
autofn_rounding=std::bind<int>(my_divide,_1,_2);//返回int(x/y)
std::cout<<fn_rounding(10,3)<<'\n';//输出3
MyPairten_two{10,2};
//捆绑成员函数:
autobound_member_fn=std::bind(&MyPair::multiply,_1);//返回x.multiply()
std::cout<<bound_member_fn(ten_two)<<'\n';//输出20
autobound_member_data=std::bind(&MyPair::a,ten_two);//返回ten_two.a
std::cout<<bound_member_data()<<'\n';//输出10
return0;
}
运行结果:
5
5
0.2
3
20
10
jQuery中bind函数用法
问题1:
<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Simple JQuery</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(function(){
$('#mybtn').bind('click',{a:'hello', b:'world'}, myFun);
});
function myFun(e){
alert(e.data.a);
alert(e.data.b)
}
</script>
</head>
<body>
<input type="button" id="mybtn" value="Click me."/>
</body>
</html>
如上面例子,可以传递多个参数。
-------------------------------------------------------
问题2:
$('<p>Test</p>').appendTo('.inner');
$('.inner').append('<p>Test</p>');
上面这个是append()和appendTo()区别,应该一目了然了吧?
而appendChild()不是jquery的方法,而是javascript原生的方法。
append和appendChild的关系是:
其实几乎一样,append就是调用appendChild实现的,只是在append前,做一个简单判断。下面贴下jquery的源代码:
append: function(){
return this.domManip(arguments, true, function( elem){
if( this.nodeType=== 1){
this.appendChild( elem);
}
});
}
--------------------------------------------------
问题3:
<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Simple JQuery</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(function(){
$('#mybtn').bind('click', myFun);
});
function myFun(){
alert($(this).attr('value'));
}
</script>
</head>
<body>
<input type="button" id="mybtn" value="Click me."/>
</body>
</html>
第3个问题不是看的很明白?直接调用应该可以呀,看看这个例子是不是你想要的?
---------------------------------------------------
问题4:网上有很多,查看参考链接这个吧。
SOCKET编程中的bind函数的作用
socket编程中的bind()函数把IP地址端口相关信息和套接字相互关联起来。
使用格式
#include<sys/types.h>
#include<sys/socket.h>
int bind(int sockfd, const struct sockaddr*addr,socklen_t*addrlen);
功能描述
当用socket()函数创建套接字以后,套接字在名称空间(网络地址族)中存在,但没有任何地址给它赋值。bind()把用addr指定的地址赋值给用文件描述符代表的套接字sockfd。addrlen指定了以addr所指向的地址结构体的字节长度。一般来说,该操作称为“给套接字命名”。
通常,在一个SOCK_STREAM套接字接收连接之前,必须通过bind()函数用本地地址为套接字命名。
备注:
调用bind()函数之后,为socket()函数创建的套接字关联一个相应地址,发送到这个地址的数据可以通过该套接字读取与使用。
备注:
bind()函数并不是总是需要调用的,只有用户进程想与一个具体的地址或端口相关联的时候才需要调用这个函数。如果用户进程没有这个需要,那么程序可以依赖内核的自动的选址机制来完成自动地址选择,而不需要调用bind()函数,同时也避免不必要的复杂度。在一般情况下,对于服务器进程问题需要调用bind()函数,对于客户进程则不需要调用bind()函数。
文章到此结束,希望我们对于bind函数和c++11里面的bind函数是什么鬼,看不懂,请高手指教的问题能够给您带来一些启发和解决方案。如果您需要更多信息或者有其他问题,请随时联系我们。