C++stl库bind函数模板用法的注意事项

类成员函数

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

创新互联专注于企业网络营销推广、网站重做改版、乐陵网站定制设计、自适应品牌网站建设、H5页面制作商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为乐陵等各大城市提供网站开发制作服务。

#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的引用内容,并不是副本。


网站栏目:C++stl库bind函数模板用法的注意事项
文章分享:http://bzwzjz.com/article/iepicg.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站设计 定制网站设计 重庆网站建设 网站制作 网站建设公司 成都网站建设推广 成都网站建设 成都网站设计 达州网站设计 成都网站制作 网站建设 成都网站建设 网站设计制作 成都网站制作 网站制作报价 网站建设 成都网站设计 网站设计 广安网站设计 成都网站设计公司 网站制作 成都网站建设公司