C++拾遗--bind函数绑定

本文介绍了C++中的bind函数,作为函数适配器,它用于将参数列表与已知函数绑定,创建新的可调用对象。主要内容包括bind的常见用法、绑定类成员函数及其在减少参数和调整参数顺序上的作用。

                        C++拾遗--bind函数绑定

前言

    函数绑定bind函数用于把某种形式的参数列表与已知的函数进行绑定,形成新的函数。这种更改已有函数调用模式的做法,就叫函数绑定。需要指出:bind就是函数适配器。


正文

适配器

#include <iostream>
#include <functional>
using namespace std;
using namespace std::placeholders;

int main()
{
	auto fun = [](int *array, int n, int num){
		for (int i = 0; i < n; i++)
		{
			if (array[i] > num)
				cout << array[i] << ends;
		}
		cout << endl;
	};
	int array[] = { 1, 3, 5, 7, 9 };
	//_1,_2 是占位符
	auto fun1 = bind(fun, _1, _2, 5);
	//等价于调用fun(array, sizeof(array) / sizeof(*array), 5);
	fun1(array, sizeof(array) / sizeof(*array));
	cin.get();
	return 0;
}
运行

7 9

在C语言中,`bind()`函数通常用于网络编程,属于套接字(socket)操作的一部分。它的主要功能是将一个本地地址(IP地址和端口号)绑定一个套接字上,使得该套接字可以监听或发送数据。 `bind()`函数的声明如下: ```c #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); ``` ### 参数说明: 1. **`sockfd`**:由`socket()`函数创建的套接字描述符。 2. **`addr`**:指向`struct sockaddr`型的指针,该结构体包含了要绑定的地址信息。 3. **`addrlen`**:`addr`结构体的长度。 ### 返回值: - 成功时返回`0`,失败时返回`-1`,并设置`errno`以指示错误型。 ### 示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main() { int sockfd; struct sockaddr_in server_addr; // 创建套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket"); exit(1); } // 设置地址信息 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); // 绑定到8080端口 server_addr.sin_addr.s_addr = INADDR_ANY; // 绑定到所有本地接口 // 绑定套接字 if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("bind"); close(sockfd); exit(1); } printf("Bind successful.\n"); close(sockfd); return 0; } ``` ### 常见错误: 1. **`EADDRINUSE`**:地址已经被使用。 2. **`EBADF`**:`sockfd`不是有效的文件描述符。 3. **`EINVAL`**:套接字已经绑定,或者地址长度不正确。 ### 注意事项: - 在调用`bind()`之前,必须先创建套接字(使用`socket()`)。 - 如果使用`INADDR_ANY`,套接字将绑定到所有可用的本地接口。 -绑定端口时,通常需要使用`htons()`函数将端口号从主机字节序转换为网络字节序。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值