array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Bind函数详解 - 爱码网

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

https://www.cnblogs.com/bclshuai/p/11380657.html

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

 

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;
}

 

输出结果

 Bind函数详解

 

 

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;
}

 

输出结果

 Bind函数详解

 

 

3         原理解析

3.1   一般函数绑定

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

 Bind函数详解

 

 

3.2   成员函数绑定

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

 Bind函数详解

 

 

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

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

//占位符改变参数顺序

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

 Bind函数详解

 

 参考文献

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

 

 

 

相关文章:

  • 2021-11-29
  • 2021-11-18
  • 2021-11-19
  • 2021-11-17
  • 2021-11-18
  • 2021-11-18
  • 2021-11-18
  • 2021-11-18
猜你喜欢
  • 2021-12-09
  • 2021-11-19
  • 2021-11-17
  • 2022-01-02
  • 2021-11-18
  • 2021-11-17
  • 2021-11-17
  • 2021-12-01
相关资源
相似解决方案