最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++11包裝器function和bind示例詳解

 更新時(shí)間:2026年05月15日 09:23:30   作者:阿旭超級學(xué)得完  
本文介紹了C++中的std::function和bind函數(shù),std::function可以將不同類型的函數(shù)用相同的類型表示,實(shí)現(xiàn)多態(tài),bind函數(shù)可以對接收的fn可調(diào)用對象處理后返回一個(gè)可調(diào)用對象,用于調(diào)整參數(shù)的順序和數(shù)量,感興趣的朋友跟隨小編一起看看吧

包裝器

std::function

std::function的作用是統(tǒng)一類型,用于將不同類型的函數(shù)用相同的類型表示從而實(shí)現(xiàn)多態(tài)
本質(zhì)上是一個(gè)類模板,其實(shí)例化對象可以包裝存儲其它可調(diào)用對象,包括仿函數(shù),lambda等,格式為function<返回值類型(參數(shù)類型)>
儲存的對象被稱為std::function的目標(biāo),若std::function不含目標(biāo),則稱為空,調(diào)用空的目標(biāo)會拋出異常

int add(int a, int b) { return a + b; }//普通函數(shù)
struct Mul {
    int operator()(int a, int b) { return a * b; }
};//仿函數(shù)
class MyClass{
public:
	static int s_add(int a,int b){
		return a+b;
	}
	int add(int a,int b){
		return a+b;
	}
};
int main() {
    function<int(int, int)> f;//創(chuàng)建一個(gè)空std::function
    f = add;//裝普通函數(shù)
    f = Mul();//裝仿函數(shù)
    f = [](int a, int b) { return a - b; };//裝lambda函數(shù)
	f=&MyClass::s_add;//裝靜態(tài)成員函數(shù),需要使用&取地址并聲明類域
	//裝普通成員函數(shù),也需要使用&并聲明類域,還需要在std::function模板里加入類或類指針,以接收this指針
	function<int(MyClass,int,int)> c_f;
	function<int(MyClass*,int,int)> p_f;
	c_f=&MyClass::add;
	p_f=&MyClass::add;
	//調(diào)用時(shí)需要將實(shí)例化的對象傳進(jìn)去,如果模板里是指針,則需要傳地址進(jìn)去
	MyClass mc;
	cout<<c_f(mc,1,1)<<endl;
	cout<<p_f(&mc,1,1)<<endl;
    function<void()> empty_func;
    // empty_func();//沒有目標(biāo)的std::function不能調(diào)用
    return 0;
}

bind

綁定是一個(gè)函數(shù)模板,也是一個(gè)可調(diào)用對象的包裝器,對接收的fn可調(diào)用對象處理后返回一個(gè)可調(diào)用對象,用于調(diào)整參數(shù)的順序和數(shù)量
auto newfunc=bing(func,arg_list),使用auto來接收返回值,調(diào)用newfunc的時(shí)候會自動(dòng)調(diào)用func,并將arg_list傳進(jìn)去
arg_list并不是參數(shù)列表,而是newfunc中的參數(shù)的順序,用_1,_2來表示將newfunc中的第幾個(gè)參數(shù)傳到func,若不用_1,則表示形參或?qū)崊?/p>

void func(int a, int b)
{
    cout << a << " " << b << endl;
}
int main()
{
    //調(diào)整參數(shù)順序:把 newfunc 的第1個(gè)參數(shù) 給 func 的第2個(gè)位置
    auto newfunc1 = bind(func, _2, _1);
    newfunc1(10, 20); // 調(diào)用 show(20,10)
    //固定參數(shù):第一個(gè)參數(shù)固定為 100
    auto newfunc2 = bind(func, 100, _1);
    newfunc2(200);    // 調(diào)用 show(100,200)
    //減少參數(shù)數(shù)量
    auto newfunc3 = bind(func, 66, 88);
    newfunc3();       // 調(diào)用 show(66,88)
}

到此這篇關(guān)于C++11包裝器function和bind示例詳解的文章就介紹到這了,更多相關(guān)C++包裝器function和bind內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

扬州市| 阿瓦提县| 台中市| 汤阴县| 临猗县| 柘荣县| 灵丘县| 广昌县| 阳西县| 始兴县| 贵州省| 仙居县| 邮箱| 济宁市| 维西| 黎川县| 剑河县| 孝义市| 黄平县| 斗六市| 丰县| 铁力市| 黄大仙区| 彰武县| 华容县| 双牌县| 临沂市| 观塘区| 西乡县| 梨树县| 武城县| 淮北市| 邯郸市| 赞皇县| 容城县| 鄂托克旗| 长汀县| 浏阳市| 宣武区| 固安县| 扎兰屯市|