您好,登錄后才能下訂單哦!
bind可以包裝類成員函數,創建函數對象。其中有接收類類型和類指針類型的版本,如:
#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函數是通過值拷貝的方式進行參數傳遞。也就是說,func1、func2是經過被拷貝的類指針構造,調用會更新g_test_st內容;func3、func4是值拷貝構造,調用時更新的是g_test_st的副本,不會影響原來的類變量。
另外,可以通過std::ref,使bind進行引用傳遞參數,如:
auto func3 = bind(&TesSt::update, std::ref(g_test_st), "hihi");
這樣func3調用時更新的是g_test_st的引用內容,并不是副本。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。