91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

function與bind怎么在C++中使用

發布時間:2021-01-12 14:57:24 來源:億速云 閱讀:241 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關function與bind怎么在C++中使用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1.std::function簡介

std::function首先是可調用對象,本質上生成了一個類(仿函數)

簡單的使用如下代碼

#include <unordered_map>
#include <iostream>
#include <functional>
using namespace std;
int func(int a)
{
  cout << a << __FUNCTION__ << endl;
  return a;
}
int main()
{
  using NewType = function<int(int)>; // function本質上生成了一個類(仿函數)
  NewType f1 = func;
  f1(55);
  return 0;
}

2.std::function與std::bind聯合使用綁定類成員函數

可將std::bind函數看作一個通用的函數適配器,它接受一個可調用對象,生成一個新的可調用對象來“適應”原對象的參數列表。

std::bind將可調用對象與其參數一起進行綁定,綁定后的結果可以使用std::function保存。std::bind主要有以下兩個作用:

  • 將可調用對象和其參數綁定成一個防函數;

  • 只綁定部分參數,減少可調用對象傳入的參數。

一個簡單的例子:

#include <unordered_map>
#include <iostream>
#include <functional>
using namespace std;
class A
{
public:
  int funcA(int a)
  {
    cout << "111 " << a << endl;
    return 1;
  }
};

int main()
{
  A a;
  using NewType = function<int(int)>; // function本質上生成了一個類(仿函數)
  NewType f1 = bind(&A::funcA, &a, std::placeholders::_1);
  f1(55);
  return 0;
}

3.std::function與std::bind聯合使用綁定類成員重載函數

綁定類成員重載函數的難點在于如何區分函數綁定的是哪一個成員函數。這時需要在函數指針前指定其類型。下面是一個簡單的例子:

#include <unordered_map>
#include <iostream>
#include <functional>
using namespace std;
class A
{
public:
  int funcA(int a)
  {
    cout << "111 " << a << endl;
    return 1;
  }
  int funcA(int a, int b)
  {
    cout << "222 " << a << endl;
    return a + b;
  }
};

int main()
{
  unordered_map<int, void *> funcMap;//嘗試將其轉載入map中
  A g;
  using NewType1 = function<int(int, int)>; 
  using NewType2 = function<int(int)>;
  NewType1* type1 = new NewType1; // function本質上生成了一個類(仿函數)
  NewType2* type2 = new NewType2;
  //獲取重載函數指針
  *type1 = std::bind((int(A::*)(int, int)) & A::funcA, &g, std::placeholders::_1, std::placeholders::_2);
  *type2 = std::bind((int(A::*)(int)) & A::funcA, &g, std::placeholders::_1);
  //
  funcMap[1] = type1; //
  funcMap[2] = type2; //
  
  // 使用
  void* s1 = funcMap[1];
  void* s2 = funcMap[2];
  NewType1* f1 = (NewType1*)(s1);
  NewType2* f2 = (NewType2*)(s2);
  (*f1)(1,5);
  (*f2)(55);
  return 0;
}

以上就是function與bind怎么在C++中使用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东辽县| 瑞丽市| 松原市| 抚顺市| 南昌县| 多伦县| 桐梓县| 望江县| 科尔| 章丘市| 育儿| 万载县| 陆良县| 兴仁县| 河西区| 宿州市| 甘洛县| 贵州省| 会泽县| 米林县| 周至县| 乌兰察布市| 江源县| 廊坊市| 兴安盟| SHOW| 南部县| 清原| 崇州市| 浮梁县| 九台市| 桃园市| 常德市| 汤原县| 札达县| 遂川县| 莎车县| 怀集县| SHOW| 原阳县| 富蕴县|