亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++11標準庫bind函數(shù)應(yīng)用教程

 更新時間:2021年12月13日 15:53:28   作者:拾荒荒的博客  
bind函數(shù)定義在頭文件functional中,可以將bind函數(shù)看做成一個通用的函數(shù)適配器,他接收一個可調(diào)用對象,生成一個新的可調(diào)用對象來"適應(yīng)"原對象的參數(shù)列表。本文將帶大家詳細了解一下bind函數(shù)的應(yīng)用詳解

bind 是什么?

bind 顧名思義: 綁定

通俗來講呢,可以這么理解有點像函數(shù)指針的意思。

資料上是這么講的:可以將 bind 函數(shù)看做一個通用函數(shù)的適配器,它接受一個可調(diào)用對象,生成一個新的可以調(diào)用對象來“適應(yīng)”原對象參數(shù)列表

它一般調(diào)用形式:

// 其中 newCallable 是一個可調(diào)用的對象, arg_list 是以逗號分隔的參數(shù)列表
// 這時我們調(diào)用 newCallable,newCallable 就會調(diào)用 callable, 并用 arg_list 傳遞參數(shù)
auto newCallable = bind(callable, arg_list);

好了,重點在于 arg_list 里,那么我們?nèi)绾蝹魅雲(yún)?shù)呢

它們是靠這些參數(shù)的位置來識別的,形如 _n 之類的, n 是整形, _1 是第一個參數(shù),_2是第二個參數(shù),以此類推。

而名字 _n 是定義在 placeholders 命名空間中, 而 placeholders 本身又定義在 std 命名空間中, 所以形如:

using std:: placeholders::_1

接下來,我們舉例幾個列子

舉個栗子

bind 是在頭文件 #include <functional> 中, 首先要包含它。

1. bind 無參數(shù)的普通函數(shù)

#include <iostream>
#include <functional> // 包含此頭文件

// 普通函數(shù)
void Fun()
{
	std::cout << "I am Fun!" << std::endl;
}

// 主函數(shù)
int main()
{
	auto fun = std::bind(Fun); // 適配 Fun 函數(shù)并返回一個可調(diào)用的對象
	fun();
	return 0;
}

調(diào)試結(jié)果:

2. bind 1個參數(shù)的普通函數(shù)

#include <iostream>
#include <functional> // 包含此頭文件

// 普通函數(shù)
void Fun(int a)
{
	std::cout << "I am Fun! a = " << a <<std::endl;
}

// 主函數(shù)
int main()
{
	auto fun = std::bind(Fun, std::placeholders::_1); 
	fun(5);
	return 0;
}

調(diào)試結(jié)果:

3. bind 多個參數(shù)的普通函數(shù)

#include <iostream>
#include <functional> // 包含此頭文件

// 普通函數(shù)
int Fun(int a, int b)
{
	return a - b;
}

// 主函數(shù)
int main()
{
	auto fun = std::bind(Fun, std::placeholders::_1, std::placeholders::_2); 
	std::cout << fun(5, 2) << std::endl;
	return 0;
}

調(diào)試結(jié)果:

4. bind 多個參數(shù)的普通函數(shù)并打亂參數(shù)位置

#include <iostream>
#include <functional> // 包含此頭文件

// 普通函數(shù)
int Fun(int a, int b)
{
	return a - b;
}

// 主函數(shù)
int main()
{
	auto fun1 = std::bind(Fun, std::placeholders::_1, std::placeholders::_2);
	auto fun2 = std::bind(Fun, std::placeholders::_2, std::placeholders::_1);
	std::cout << fun1(5, 2) << std::endl;
	std::cout << fun1(5, 2) << std::endl;
	return 0;
}

調(diào)試結(jié)果:

5. bind 類的成員函數(shù)

#include <iostream>
#include <functional> // 包含此頭文件

class MyClass {
public:
	MyClass() {}
	~MyClass() {}

public:
	void printInfo() {
		std::cout << "MyClass Info." << std::endl;
	}
};

// 主函數(shù)
int main()
{
	MyClass A;
	auto fun = std::bind(&MyClass::printInfo, A);
	fun();
	return 0;
}

調(diào)試結(jié)果:

再舉個應(yīng)用栗子

#include <iostream>
#include <functional> // 包含此頭文件

typedef std::function<void(int)> CallbackType;
// A 類
class MyClassA {
public:
	void regeditCallBack(CallbackType fun)
	{ _callback_fun = fun; }

	void printInfoA(int d) 
	{ _callback_fun(d); }

private:
	CallbackType _callback_fun;
};
// B 類
class MyClassB {
public:
	void printInfoB(int d) {
		std::cout << d << std::endl;
	}
};

// 主函數(shù)
int main()
{
	MyClassB B;
	auto funB = std::bind(&MyClassB::printInfoB, B, std::placeholders::_1);

	MyClassA A;
	A.regeditCallBack(funB);
	A.printInfoA(1);

	return 0;
}

調(diào)試結(jié)果:

到此這篇關(guān)于C++11標準庫bind函數(shù)應(yīng)用教程的文章就介紹到這了,更多相關(guān)C++11 bind函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深度理解C語言中的關(guān)鍵字static

    深度理解C語言中的關(guān)鍵字static

    在C語言中static主要定義全局靜態(tài)變量、定義局部靜態(tài)變量、定義靜態(tài)函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言中關(guān)鍵字static的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • C++實現(xiàn)LeetCode(57.插入?yún)^(qū)間)

    C++實現(xiàn)LeetCode(57.插入?yún)^(qū)間)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(57.插入?yún)^(qū)間),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++數(shù)據(jù)結(jié)構(gòu)之哈希表的實現(xiàn)

    C++數(shù)據(jù)結(jié)構(gòu)之哈希表的實現(xiàn)

    哈希表,即散列表,可以快速地存儲和查詢記錄。這篇文章主要為大家詳細介紹了C++數(shù)據(jù)結(jié)構(gòu)中哈希表的實現(xiàn),感興趣的小伙伴可以了解一下
    2023-03-03
  • c語言數(shù)據(jù)結(jié)構(gòu)之并查集 總結(jié)

    c語言數(shù)據(jù)結(jié)構(gòu)之并查集 總結(jié)

    一種用于管理分組的數(shù)據(jù)結(jié)構(gòu)。它具備兩個操作:(1)查詢元素a和元素b是否為同一組 (2) 將元素a和b合并為同一組,需要的朋友可以參考下
    2018-08-08
  • Opencv實現(xiàn)拼圖板游戲

    Opencv實現(xiàn)拼圖板游戲

    這篇文章主要為大家詳細介紹了Opencv實現(xiàn)拼圖板小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++深入講解類與封裝的概念與使用

    C++深入講解類與封裝的概念與使用

    我們都知道C++有三大特性:封裝、繼承、多態(tài),現(xiàn)在我們來總結(jié)一下封裝的相關(guān)知識與類的概念,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-04-04
  • 深入理解C++的對象模型

    深入理解C++的對象模型

    本文在介紹C++使用的對象模型之前,先介紹了2種對象模型:簡單對象模型(a simple object model)和表格驅(qū)動對象模型(a table-driven object model),這樣介紹對后面的內(nèi)容更有幫助,有需要的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • C語言輸出教學(xué)日歷表的方法實例

    C語言輸出教學(xué)日歷表的方法實例

    最近幫朋友做一些C語言的練習(xí)題,期間遇到了個比較有意思的題目,下面這篇文章主要給大家介紹了關(guān)于C語言輸出教學(xué)日歷表的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • C++基礎(chǔ)之this指針與另一種“多態(tài)”

    C++基礎(chǔ)之this指針與另一種“多態(tài)”

    this指針識別了同一個類的不同的對象,換句話說,this指針使得成員函數(shù)可以訪問同一個類的不同對象。再深入一點,this指針使得成員函數(shù)會因為this指針的不同而訪問到了不同的成員變量
    2013-07-07
  • C++Node類Cartographer開始軌跡的處理深度詳解

    C++Node類Cartographer開始軌跡的處理深度詳解

    這篇文章主要介紹了C++Node類Cartographer開始軌跡的處理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03

最新評論