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、绑定普通函数


 #include <functional> 
 int sumRun(const int &a, const int &b, const int &c) 
 {
     cout << "计算公式的值= " << a << "x" << b << "-" << c << endl;
     return a * b - c; 
 }
 
 int main() 
 {
	  int a = 3; 
	  int b = 2; 
	  int c = 1; 
	  auto sum1 = bind(sumRun,placeholders::_1, placeholders::_2, placeholders::_3);
	 function<int(int, int, int)> fun1 = bind(sumRun, placeholders::_1,
	 placeholders::_2, placeholders::_3); 
	 cout << "sumRun: " << sumRun(a,b, c) << endl; 
	 cout << "sum1: " << sum1(a, b, c) << endl; cout <<"fun1: " << fun1(a, b, c) << endl; 
	 return 0; 
 }

输出结果: D:\code\C++\CLion\myConfig\cmake-build-debug\myConfig.exe
sumRun: 计算公式的值= 3x2-1
5
sum1: 计算公式的值= 3x2-1
5
fun1: 计算公式的值= 3x2-1
5

2、绑定类的成员函数
bind绑定类成员函数时,第一个参数表示对象成员函数的指针,第二个参数表示对象的地址。
必须显示的指定&Plus::plus,因为编译器不会将对象的成员函数隐式转换成函数指针,所以必须在Plus::plus前面添加&。
使用对象成员函数的指针时,必须知道该指针属于哪个对象,因此第二个参数为对象的地址&plus。

#include<iostream>
#include<functional>
    using namespace std;
    class Plus
    {
    public:
        int plus(int a,int b)
        {
            return a+b;
        }
    }
    int main()
    {
        Plus p;
        指针形式调用成员函数
        function<int(int,int)> func1 = std::bind(&Plus::plus,&p, placeholders::_1, placeholders::_2);
        对象形式调用成员函数
        function<int(int,int)> func2 = std::bind(&Plus::plus,p, placeholders::_1, placeholders::_2);
        cout<<func1(1,2)<<endl; //3
        cout<<func2(1,2)<<endl; //3
        retunrn 0;
    }

3、绑定类静态成员函数

#include<iostream>
#include<functional>
    using namespace std;
    class Plus
    {
    public:
        static int plus(int a,int b)
        {
            return a+b;
        }
    }
    int main()
    {
        function<int<int,int>> func1 = std::bind(&Plus::plus, placeholders::_1, placeholders::_2);
        cout<<func1(1,2)<<endl; //3
        retunrn 0;
    }
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
socketbind函数是用于将一个套接字(socket)绑定到一个特定的地址和端口号上。它在网络编程中经常被用来指定服务器监听的IP地址和端口号。 在C语言中,使用socketbind函数的原型如下: ```c #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); ``` 其中,参数说明如下: - sockfd:需要绑定的套接字描述符; - addr:指向目标地址结构体的指针; - addrlen:目标地址结构体的长度。 常见的使用场景是在服务器程序中,通过bind函数将服务器的套接字绑定到服务器的IP地址和端口上,以便客户端能够连接到服务器。 例如,以下代码片段展示了一个简单的服务器使用socketbind函数进行绑定的示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> int main() { int sockfd; struct sockaddr_in server_addr; // 创建套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror("socket"); exit(EXIT_FAILURE); } // 设置服务器地址结构体 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 绑定套接字到指定地址和端口 if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); exit(EXIT_FAILURE); } // 其他操作... return 0; } ``` 在这个示例中,首先创建了一个套接字,然后设置服务器地址结构体,最后使用bind函数将套接字绑定到指定的地址和端口。绑定成功后,服务器可以监听客户端的连接请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值