标准库bind()函数

《C++ primer》10.3.4章节

 bind()函数的作用是绑定一个函数

void debug(QString str)
{
    qDebug()<<str;
}

auto newCall = std::bind(debug,std::placeholders::_1);
newCall("哈哈");

这里newCall绑定了debug(),调用newCall()就会调用debug(), std::placeholders::_1为传给debug()的第一个参数,_2、_3以此类推。

重载函数:

void debug(QString str)
{
    qDebug()<<str;
}

void debug(QString str1,QString str2)
{
    qDebug()<<str1<<str2;
}
    auto newCall01 = std::bind(static_cast<void(*)(QString,QString)>(& debug),std::placeholders::_1,std::placeholders::_2);
    newCall01("哈哈","呵呵");

    auto newCall02 = std::bind(static_cast<void(*)(QString)>(& debug),std::placeholders::_1);
    newCall02("嘿嘿嘿");

绑定时固定第二个参数的值。

bind()可以用于处理传给泛型算法的函数。

泛型算法:按条件查找元素算法find_if()

泛型算法find_if()可以传入一个含有一个参数的函数作为查找条件,如果是这样:

bool findValue(const int & value, const int &rangeMin,const int & rangeMax)
{
    if(value > rangeMin && value < rangeMax)
        return true;
    else
        return false;
}

直接使用这个有3个参数的函数作为查找的条件是不行的,这时候就用到了bind()。

bool findValue(const int & value, const int &rangeMin,const int & rangeMax)
{
    if(value > rangeMin && value < rangeMax)
        return true;
    else
        return false;
}

int main(int argc, char *argv[])
{
    QVector<int> list;
    for (int i = 1;i < 10;++i)
    {
        list << i;
    }
    auto findIfResult = std::find_if(list.begin(),list.end(),std::bind(findValue,std::placeholders::_1,7,9));
    qDebug()<<*findIfResult;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C 语言中的 bind 函数是指将一个套接字和特定的 IP 地址和端口号绑定在一起。它通常在服务器端程序中使用,用来指定服务器的地址和端口号,以便客户端程序能够连接到服务器。 语法: ``` int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); ``` 其中,sockfd 是指要绑定的套接字的文件描述符;addr 是一个指向 sockaddr 结构体的指针,其中包含了要绑定的 IP 地址和端口号;addrlen 是 sockaddr 结构体的大小。 返回值: - 成功时返回 0; - 失败时返回 -1,并设置 errno。 示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define PORT 12345 int main(void) { 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_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); // 绑定套接字 if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); close(sockfd); exit(EXIT_FAILURE); } // 其他代码 close ### 回答2: C语言中的bind函数是一个网络编程函数,用于将套接字(socket)与特定的IP地址和端口号绑定在一起。它是在Linux系统的socket库中提供的一个函数bind函数的原型如下: #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) 其中,sockfd是套接字描述符,addr是指向特定IP地址和端口号的结构体指针,addrlen表示addr结构体的大小。 bind函数的作用是将指定的套接字与特定的IP地址和端口号进行绑定。它通常用于服务器程序,在服务器程序中,我们需要先创建一个套接字,并调用bind函数将套接字与服务器所在的IP地址和端口号绑定,从而使得其他计算机可以通过这个IP地址和端口号来访问服务器。 使用bind函数时,我们需要先创建一个套接字,然后使用bind函数指定套接字需要绑定的IP地址和端口号。如果绑定成功,bind函数返回0;如果出现错误,返回-1,并设置errno来指示错误类型,可以使用perror函数打印错误信息。 bind函数在网络编程中是非常常用的,它是建立服务器程序的第一步。通过绑定特定的IP地址和端口号,我们可以使得服务器可以监听来自网络上其他计算机的请求,并与其进行通信。 ### 回答3: bind函数是C++标准库中的一个函数,用于将函数对象与其参数进行绑定,从而生成一个新的可调用对象。 bind函数的使用方式比较灵活。它可以将一个函数对象与零个或多个参数进行绑定,也可以将成员函数与其对应的对象进行绑定。 bind函数的语法如下: template< class F, class... Args > bind( F&& f, Args&&... args ); 其中,F是函数类型,args是需要绑定的参数。 使用bind函数的步骤为: 1. 创建需要绑定的函数对象,可以是普通函数函数指针、成员函数指针等。 2. 将函数对象传递给bind函数,同时将需要绑定的参数也传递给bind函数。 3. bind函数会返回一个新的可调用对象,可以使用这个对象进行函数调用。 bind函数的返回值类型是一个可调用对象,因此可以直接对其进行调用操作。该对象会自动根据绑定的参数类型进行调用。 使用bind函数可以实现一些方便的功能,比如: 1. 将多参数函数转换为单参数函数。 2. 固定函数的部分参数,从而生成一个新的可调用对象。 3. 将成员函数绑定到对象,从而可以在不同的地方调用该成员函数。 总之,bind函数是一个非常有用的函数,能够简化函数的调用过程,提高代码的可读性和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值