c++ | this指针 和bind、function

个人理解:
this 指针 可以简单理解为类 对象的 指针(也是隐藏指针),注意,类的成员(成员函数、成员变量)是通过类的对象进行调用的。如果把函数充当成员函数是错误的,粗鲁的解释,类的成员函数都有一个隐藏的指针(this指针),但是 c函数是没有指针的。

看看gpt的回答
C++的成员函数和C函数在底层上有一些重要的区别,这就是为什么不能直接将成员函数指针传递给期望C函数指针的地方。这些区别涉及到成员函数的隐含参数(即this指针)和调用约定。

在C++中,成员函数可以访问其所属类的成员变量和其他成员函数。为了实现这种功能,每个成员函数都有一个隐含的额外参数,称为this指针,该指针指向调用该函数的对象实例。这就是成员函数可以访问类成员的原因。而普通的C函数没有这个隐含的this指针。

C函数指针只是一个指向函数的指针,它没有额外的信息来处理成员函数的this指针。因此,直接将成员函数指针传递给C函数指针是不合适的,因为C函数指针无法处理这个额外的this指针。

为了在C++中使用成员函数,可以使用以下方法之一:

静态成员函数:静态成员函数没有隐含的this指针,因此它们可以被转换为普通的C函数指针。但是,静态成员函数只能访问静态成员变量,无法访问非静态成员变量。

Lambda表达式:使用Lambda表达式可以捕获当前作用域中的变量,并将其与函数一起封装。这使得Lambda可以作为函数对象传递,并在其中调用成员函数。

std::function和std::bind:这些C++标准库的功能提供了更灵活的方式来处理函数对象,包括成员函数。

如果你想将成员函数传递给C函数指针,需要首先考虑如何处理隐含的this指针,例如将成员函数包装在静态成员函数中,或使用Lambda表达式和std::function。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值