C++stl庫bind函數(shù)模板用法的注意事項(xiàng)

類成員函數(shù)

bind可以包裝類成員函數(shù),創(chuàng)建函數(shù)對象。其中有接收類類型和類指針類型的版本,如:

創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、樂陵網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為樂陵等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

#include <iostream>
#include <memory>
#include <functional>
using namespace std;

struct TesSt {
    TesSt()
    {}

    void update(const string &in_str) {
        str = in_str;
        cout << "str:" << str << endl;;
    }

    string str;
};

TesSt g_test_st;

int main () {
    auto func1 = bind(&TesSt::update, &g_test_st, "hihi"); 
    auto func2 = bind(TesSt::update, &g_test_st, "hihi");
    auto func3 = bind(&TesSt::update, g_test_st, "hihi");
    auto func4 = bind(TesSt::update, g_test_st, "hihi");
    return 0;
}

如果不做任何處理的話,bind函數(shù)是通過值拷貝的方式進(jìn)行參數(shù)傳遞。也就是說,func1、func2是經(jīng)過被拷貝的類指針構(gòu)造,調(diào)用會更新g_test_st內(nèi)容;func3、func4是值拷貝構(gòu)造,調(diào)用時更新的是g_test_st的副本,不會影響原來的類變量。

另外,可以通過std::ref,使bind進(jìn)行引用傳遞參數(shù),如:

    auto func3 = bind(&TesSt::update, std::ref(g_test_st), "hihi");

這樣func3調(diào)用時更新的是g_test_st的引用內(nèi)容,并不是副本。

網(wǎng)站名稱:C++stl庫bind函數(shù)模板用法的注意事項(xiàng)
轉(zhuǎn)載來源:http://muchs.cn/article26/iepicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、定制網(wǎng)站、網(wǎng)站設(shè)計公司、、域名注冊靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)