Bind函数详解

自己开发了一个股票软件,功能很强大,需要的点击下面的链接获取:

QStockView股票智能分析报警软件下载链接 - 一字千金 - 博客园

Bind函数详解

目录

1       简介... 1

2       使用实例... 1

2.1      bind函数常规使用... 1

2.2      bind函数和thread线程函数... 3

3       原理解析... 4

3.1      一般函数绑定... 4

3.2      成员函数绑定... 5

3.3      Bind函数如何改变入参的顺序... 5

1         简介

bind函数的作用是通过绑定一个其他func函数生成一个依赖于func的新的函数对象,复用func函数的实现,但是可以改变这个func的参数数量和顺序,可以绑定普通函数、全局函数,静态函数,成员函数,而且其参数可以支持占位符(std::placeholders::_1,std::placeholders::_2)来改变参数的顺序,并且可以设置func中默认的几个参数来减少输入参数的数量。

2         使用实例

2.1   bind函数常规使用

// BindTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <functional>
#include <iostream>
using namespace std;
int add(int a, int b)
{
    printf("normal function:%d+%d=",a,b );
    return a + b;
}
class addClass
{
public:
    int add(int a, int b)
    {
        printf("member function:%d+%d=", a, b);
        return a + b;
    };
    int extraAdd(int a, int b)
    {
        //printf("member extraAdd function:%d+%d=", a, b);
        auto classpointadd = std::bind(&addClass::add, this,a,b);
        return classpointadd();
    };
};
int main()
{    //绑定静态函数
    auto fadd = std::bind(add, std::placeholders::_1, 4);
    cout<<fadd(2) << endl;
    //绑定成员函数,第一个参数需要是对象
    addClass addobject;
    auto classadd = std::bind(&addClass::add, addobject, std::placeholders::_1, 3);
    cout <<classadd(2) << endl;
    //绑定成员函数,第一个参数也可以是指针
    auto classpointadd = std::bind(&addClass::add, &addobject, std::placeholders::_1, 2);
    cout << classpointadd(2) << endl;
    //也可以在类的成员函数内部绑定成员函数,并且传递this指针
    cout << addobject.extraAdd(1, 4) << endl;
    //占位符改变参数顺序
    auto changeOrder= std::bind(&addClass::add, addobject, std::placeholders::_2, std::placeholders::_1);
    cout << changeOrder(1,2) << endl;//输入参数1,2,在add中参数变成2,1.
    getchar();
    return 0;
}

输出结果

 

2.2   bind函数和thread线程函数

// BindTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <functional>
#include <iostream>
#include <thread>
using namespace std;
class threadBind
{
public:
    void StartThread()
    {
        m_ReconnectThread = std::move(thread(std::bind(&threadBind::Reconnect, this)));
    }
    void Reconnect() {
        while (true)
        {
            //do reconnect
            printf("thread func run\n");
            break;
        }
    };
private:
    std::thread m_ReconnectThread;
};
    
int main()
{    
    //线程函数绑定
    threadBind thr;
    thr.StartThread();
    getchar();
    return 0;
}

输出结果

 

3         原理解析

3.1   一般函数绑定

Bind函数绑定函数时,会创建一个新的操作对象,对象内部有指向函数的指针和参数变量保存默认的参数。

 

3.2   成员函数绑定

绑定成员函数时,需要传入对象的指针,不然bind找不到是调用哪个对象的成员函数。

 

3.3   Bind函数如何改变入参的顺序

参数输入函数时,默认是从左到右的顺序,通过bind和占位符的顺序,可以改变输入参数的输入顺序。

//占位符改变参数顺序

    auto changeOrder= std::bind(&addClass::add, addobject, std::placeholders::_2std::placeholders::_1);

 

 参考文献

https://www.cnblogs.com/xusd-null/p/3698969.html

https://www.cnblogs.com/jerry-fuyi/p/12633621.html

https://blog.csdn.net/u013654125/article/details/100140328

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

bclshuai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值