Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ stl库bind函数模板用法的注意事项

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

作者头像
学徒漠筱歌
发布于 2022-07-17 02:30:10
发布于 2022-07-17 02:30:10
45500
代码可运行
举报
文章被收录于专栏:ZMHZMH
运行总次数:0
代码可运行

类成员函数

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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进行引用传递参数,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    auto func3 = bind(&TesSt::update, std::ref(g_test_st), "hihi");

这样func3调用时更新的是g_test_st的引用内容,并不是副本。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——11.多态
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态。
hope kc
2024/09/23
1100
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——11.多态
C++编程经验(11):std::function 和 bind绑定器
在前面C++集群的项目里面大量应用到了绑定器来做解耦操作,那么,绑定器到底是什么呢?有什么玄妙的地方嘞?
看、未来
2021/10/09
1.5K0
C++编程经验(11):std::function 和 bind绑定器
C++11-lambda表达式/包装器/线程库
捕捉列表,该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用
用户9645905
2022/11/30
1.2K0
C++11-lambda表达式/包装器/线程库
【C++航海王:追寻罗杰的编程之路】多态你了解多少?
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生不同的状态。
枫叶丹
2024/06/04
910
【C++航海王:追寻罗杰的编程之路】多态你了解多少?
【C++】多态
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
zxctscl
2024/04/25
1180
【C++】多态
【c++11】包装器
包装器(Wrapper) 是一个常见的编程设计模式,通常用于封装或“包装”某个现有的对象、函数、数据结构或者操作,以提供额外的功能或简化接口。在不同的上下文中,包装器可能有不同的实现方式和目的,但核心思想都是“将现有功能封装起来,以实现更强的扩展性、易用性或者功能分离”。
用户11029103
2025/02/03
1660
【c++11】包装器
C++多态
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态 举个例子:比如说买票,普通人是全价买,学生是半价,退伍军人是优先。
有礼貌的灰绅士
2023/04/06
3080
C++多态
C++之std::function、std::bind、lambda特性
std::function 是 C++11 标准库中的一个模板类,它可以用于包装任何可调用对象(函数、函数指针、成员函数、lambda 表达式等),并提供一种统一的方式来管理和调用这些可调用对象。
Linux兵工厂
2024/04/15
9360
C++之std::function、std::bind、lambda特性
【C++11】可变参数模板/新的类功能/lambda/包装器--C++
成员变量声明时给缺省值是给初始化列表用的,如果没有显示在初始化列表初始化,就会在初始化列表用这个却绳子初始化,这个我们在类和对象部分讲过了,点击跳转,可以查看我的主页哦.
小志biubiu
2025/02/27
1600
【C++11】可变参数模板/新的类功能/lambda/包装器--C++
【C++航海王:追寻罗杰的编程之路】C++11(四)
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。
枫叶丹
2024/06/04
1610
【C++航海王:追寻罗杰的编程之路】C++11(四)
【C++】继承和多态
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类/子类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。
YoungMLet
2024/03/01
2000
【C++】继承和多态
C++11(3)
C++11 的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比C++98/03,类模版和函数模版中只能含 固定数量 的模版参数,可变模版参数无疑是一个巨大的改
啊QQQQQ
2024/11/19
1160
C++11(3)
【c++】一篇文章带你了解c++11的新特性&&c++11详解
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。
用户10925563
2024/08/06
2530
【c++】一篇文章带你了解c++11的新特性&&c++11详解
C++11中lambda表达式与包装器
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。
用户11317877
2024/10/31
1060
C++11中lambda表达式与包装器
【C++】三大特性之多态
多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会
青衫哥
2023/03/31
8180
【C++】三大特性之多态
【C++】多态——实现、重写、抽象类、多态原理
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
平凡的人1
2023/10/15
6110
【C++】多态——实现、重写、抽象类、多态原理
【C++】多态(定义、虚函数、重写、隐藏)
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态。
秦jh
2024/07/03
2310
【C++】多态(定义、虚函数、重写、隐藏)
C++11的简单介绍(下)
上述代码就是使用C++11中的lambda表达式来解决,可以看出lambda表达式实际是一个匿名函数。
ahao
2024/03/19
1430
C++11的简单介绍(下)
【C++】多态
多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态),这⾥我们重点讲运⾏时多态,编译时多态(静态多态)和运⾏时多态(动态多态)。编译时多态(静态多态)主要就是我们前⾯讲的函数重载和函数模板,他们传不同类型的参数就可以调⽤不同的 函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时⼀般归为静态,运⾏时归为动态。
用户11375356
2024/11/22
810
【C++】多态
【C++】从零开始认识多态
面向对象技术(oop)的核心思想就是封装,继承和多态。通过之前的学习,我们了解了什么是封装,什么是继承。
叫我龙翔
2024/05/08
1000
【C++】从零开始认识多态
相关推荐
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——11.多态
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档