利用C++ std::bind 實(shí)現(xiàn)靈活的函數(shù)調(diào)用
基本語法與頭文件
std::bind 需要包含 <functional> 頭文件,并使用占位符 _1, _2 等(位于 std::placeholders 命名空間)。占位符表示新函數(shù)的參數(shù)位置,例如 _1 對(duì)應(yīng)第一個(gè)參數(shù),_2 對(duì)應(yīng)第二個(gè)參數(shù)。
#include <functional> #include <iostream> using namespace std; using namespace std::placeholders; // 啟用 _1, _2 等占位符
綁定普通函數(shù)
通過 std::bind 可以固定函數(shù)的部分參數(shù),生成新的可調(diào)用對(duì)象。未綁定的參數(shù)用占位符表示。
int add(int a, int b) { return a + b; }
int main() {
auto add10 = bind(add, 10, _1); // 綁定第一個(gè)參數(shù)為 10
cout << add10(5) << endl; // 輸出 15 (10 + 5)
}參數(shù)順序重排
std::bind 允許通過占位符調(diào)整參數(shù)順序,例如反轉(zhuǎn)參數(shù):
void show(int a, int b, int c) {
cout << a << ", " << b << ", " << c << endl;
}
int main() {
auto reverse = bind(show, _3, _2, _1); // 反轉(zhuǎn)參數(shù)順序
reverse(1, 2, 3); // 輸出 3, 2, 1
}綁定成員函數(shù)
綁定成員函數(shù)時(shí),需將對(duì)象實(shí)例作為第一個(gè)參數(shù)(指針或引用):
class Calculator {
public:
int add(int a, int b) { return a + b; }
};
int main() {
Calculator calc;
auto bound_add = bind(&Calculator::add, &calc, _1, _2);
cout << bound_add(3, 5) << endl; // 輸出 8
}綁定 Lambda 與仿函數(shù)
std::bind 也可以綁定 Lambda 表達(dá)式或仿函數(shù),但現(xiàn)代 C++ 中直接使用 Lambda 通常更簡(jiǎn)潔:
auto lambda = [](int x, int y) { return x * y; };
auto bound_lambda = bind(lambda, _1, 5);
cout << bound_lambda(3) << endl; // 輸出 15 (3 * 5)
與 STL 算法結(jié)合
std::bind 可用于適配老式 STL 算法的參數(shù)要求,例如 std::for_each:
vector<int> nums = {1, 2, 3};
auto print = bind(show, _1, 0, 0); // 僅使用第一個(gè)參數(shù)
for_each(nums.begin(), nums.end(), print); // 輸出 1,0,0 2,0,0 3,0,0
注意事項(xiàng)
- 綁定參數(shù)時(shí)默認(rèn)以值傳遞方式捕獲,若需引用傳遞,使用
std::ref或std::cref。 - 在 C++11 及以上版本中,優(yōu)先使用 Lambda 表達(dá)式替代
std::bind,代碼可讀性更高。
到此這篇關(guān)于利用C++ std::bind 實(shí)現(xiàn)靈活的函數(shù)調(diào)用的文章就介紹到這了,更多相關(guān)C++ std::bind函數(shù)調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的建立與基本操作
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的建立與基本操作的相關(guān)資料,需要的朋友可以參考下2017-03-03
CString,字符串,整數(shù)等相互轉(zhuǎn)換方法(推薦)
下面小編就為大家?guī)硪黄狢String,字符串,整數(shù)等相互轉(zhuǎn)換方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
C++獲取字符串最后一個(gè)單詞長(zhǎng)度的多種方法
在字符串處理中,獲取最后一個(gè)單詞的長(zhǎng)度是一個(gè)常見問題,這個(gè)問題在文本處理、編譯原理、自然語言處理等領(lǐng)域都有廣泛應(yīng)用,本文將詳細(xì)介紹多種解決該問題的方法,并分析各自的優(yōu)缺點(diǎn),需要的朋友可以參考下2026-03-03
C++ throw關(guān)鍵字實(shí)現(xiàn)拋出異常和異常規(guī)范
本文主要介紹了C++ throw關(guān)鍵字實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Pipes實(shí)現(xiàn)LeetCode(193.驗(yàn)證電話號(hào)碼)
這篇文章主要介紹了Pipes實(shí)現(xiàn)LeetCode(193.驗(yàn)證電話號(hào)碼),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C/C++之long int與long long的區(qū)別及說明
這篇文章主要介紹了C/C++之long int與long long的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
C語言數(shù)學(xué)公式來實(shí)現(xiàn)土味表白
大家好,本篇文章主要講的是C語言數(shù)學(xué)公式來實(shí)現(xiàn)土味表白,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12

