汪晴: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) 应该是这样。。
张豪的回答:
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) 应该是这样。。
使徒行者的回答:
<p>可以获取:</p>c++取外网ip 源代码 #include <winsock.h> #include <stdio.h> wsadata wsadat; short int port = 80; wsastartup(makeword(1,1),&wsadat); socket sd = socket(af_inet, sock_stream, 0); sockaddr_in sockaddr; memset((void*)&sockaddr,0,sizeof(sockaddr)); sockaddr.sin_family=af_inet; sockaddr.sin_port=htons(port); sockaddr.sin_addr.s_addr=inet_addr("221.5.47.132"); connect(sd, (lpsockaddr)&sockaddr, sizeof(sockaddr)); char sendstr[]="get /ip2city.asp http/1.1\r\naccept: */*\r\nreferer: ******\r\nuser-agent: mozilla/4.0\r\nhost: <a href="https://wenwen.sogou.com/login/redirect?url=www.ip138.com" target="_blank">www.ip138.com</a>\r\nconnection: close\r\n\r\n\0"; char* p; int ilen = strlen(sendstr); p = sendstr; while (ilen){ int iret = send(sd,p,ilen,0); if (iret > 0) { p += iret; ilen -= iret; continue; } return; } char recvstr[1024]; memset(recvstr,0,1024); p = recvstr; char* iindex_head ; ilen = 1024; int need_len = -1; while (ilen){ int iret = recv(sd,p,ilen,0); if (iret <= 0) { return; } p += iret; ilen -= iret; if ((iindex_head = strstr(recvstr,"\r\n\r\n"))&&(need_len==-1)) { char* iindex = strstr(recvstr,"content-length:"); if (!iindex) { continue; } char *p1 = iindex + strlen("content-length:"); need_len = iindex_head - recvstr + 2 + atol(p1); } if (1024 - ilen >=need_len) { break; } } char *p1 = strstr(iindex_head,"["); char *p0 = strstr(p1,"]"); *p0 = '\0'; printf("ip=%s",p1+1); closesocket(sd); wsacleanup();