亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C++11標準庫bind函數應用方法是什么

發布時間:2021-12-13 17:07:02 來源:億速云 閱讀:141 作者:iii 欄目:開發技術

這篇文章主要講解了“C++11標準庫bind函數應用方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++11標準庫bind函數應用方法是什么”吧!

    bind 是什么?

    bind 顧名思義: 綁定

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

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

    它一般調用形式:

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

    好了,重點在于 arg_list 里,那么我們如何傳入參數呢

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

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

    using std:: placeholders::_1

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

    舉個栗子

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

    1. bind 無參數的普通函數

    #include <iostream>
    #include <functional> // 包含此頭文件
    
    // 普通函數
    void Fun()
    {
    	std::cout << "I am Fun!" << std::endl;
    }
    
    // 主函數
    int main()
    {
    	auto fun = std::bind(Fun); // 適配 Fun 函數并返回一個可調用的對象
    	fun();
    	return 0;
    }

    調試結果:

    C++11標準庫bind函數應用方法是什么

    2. bind 1個參數的普通函數

    #include <iostream>
    #include <functional> // 包含此頭文件
    
    // 普通函數
    void Fun(int a)
    {
    	std::cout << "I am Fun! a = " << a <<std::endl;
    }
    
    // 主函數
    int main()
    {
    	auto fun = std::bind(Fun, std::placeholders::_1); 
    	fun(5);
    	return 0;
    }

    調試結果:

    C++11標準庫bind函數應用方法是什么

    3. bind 多個參數的普通函數

    #include <iostream>
    #include <functional> // 包含此頭文件
    
    // 普通函數
    int Fun(int a, int b)
    {
    	return a - b;
    }
    
    // 主函數
    int main()
    {
    	auto fun = std::bind(Fun, std::placeholders::_1, std::placeholders::_2); 
    	std::cout << fun(5, 2) << std::endl;
    	return 0;
    }

    調試結果:

    C++11標準庫bind函數應用方法是什么

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

    #include <iostream>
    #include <functional> // 包含此頭文件
    
    // 普通函數
    int Fun(int a, int b)
    {
    	return a - b;
    }
    
    // 主函數
    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;
    }

    調試結果:

    C++11標準庫bind函數應用方法是什么

    5. bind 類的成員函數

    #include <iostream>
    #include <functional> // 包含此頭文件
    
    class MyClass {
    public:
    	MyClass() {}
    	~MyClass() {}
    
    public:
    	void printInfo() {
    		std::cout << "MyClass Info." << std::endl;
    	}
    };
    
    // 主函數
    int main()
    {
    	MyClass A;
    	auto fun = std::bind(&MyClass::printInfo, A);
    	fun();
    	return 0;
    }

    調試結果:

    C++11標準庫bind函數應用方法是什么

    再舉個應用栗子

    #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;
    	}
    };
    
    // 主函數
    int main()
    {
    	MyClassB B;
    	auto funB = std::bind(&MyClassB::printInfoB, B, std::placeholders::_1);
    
    	MyClassA A;
    	A.regeditCallBack(funB);
    	A.printInfoA(1);
    
    	return 0;
    }

    調試結果:

    C++11標準庫bind函數應用方法是什么

    感謝各位的閱讀,以上就是“C++11標準庫bind函數應用方法是什么”的內容了,經過本文的學習后,相信大家對C++11標準庫bind函數應用方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

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

    AI

    山丹县| 荣成市| 齐河县| 德格县| 宁德市| 南溪县| 景德镇市| 新余市| 永靖县| 福清市| 纳雍县| 将乐县| 阳江市| 临漳县| 德安县| 临颍县| 巴里| 长岭县| 平顶山市| 博爱县| 湖南省| 都昌县| 阳高县| 三江| 榆中县| 英吉沙县| 大厂| 彭山县| 衡阳县| 沁水县| 蓝田县| 安阳县| 岳普湖县| 合山市| 武邑县| 宣汉县| 武川县| 达拉特旗| 驻马店市| 祥云县| 清苑县|