C++stl库bind函数模板用法的注意事项-创新互联

类成员函数

bind可以包装类成员函数,创建函数对象。其中有接收类类型和类指针类型的版本,如:

成都创新互联成立于2013年,我们提供高端成都网站建设成都网站制作成都网站设计、网站定制、营销型网站建设小程序开发、微信公众号开发、成都网站推广服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为成都发电机维修企业提供源源不断的流量和订单咨询。
#include 
#include 
#include 
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的引用内容,并不是副本。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:C++stl库bind函数模板用法的注意事项-创新互联
URL地址:http://ybzwz.com/article/eigdj.html