个人理解:
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++标准库的功能提供了更灵活的方式来处理函数对象,包括成员函数。文章来源:https://www.toymoban.com/news/detail-636554.html
如果你想将成员函数传递给C函数指针,需要首先考虑如何处理隐含的this指针,例如将成员函数包装在静态成员函数中,或使用Lambda表达式和std::function。文章来源地址https://www.toymoban.com/news/detail-636554.html
到了这里,关于c++ | this指针 和bind、function的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!