c++ - 为什么通过函数指针调用成员函数时需要 "this"前缀?

标签 c++ this pointer-to-member

据我所知,在 C++ 中,在同一类的函数成员中调用另一个成员函数不需要“this”前缀,因为它是隐式的。但是,在使用函数指针的特定情况下,编译器需要它。仅当我通过 func 指针为调用包含“this”前缀时,以下代码才能正确编译 -

当使用函数指针时,编译器可以推断出它何时指向同一类的成员 func 吗?

class FooBar 
{
private: 
    int foo;

public:  

    FooBar()
    {
        foo = 100;
    }

    int GetDiff(int bar)
    {
        return abs(foo - bar);
    }

    typedef int(FooBar::*MyFuncPtr)(int); 

    void FooBar::Bar()
    {       
        MyFuncPtr f = &FooBar::GetDiff;
        (this->*f)(10);
        GetDiff(10);
    }

};

最佳答案

这是必需的,因为成员函数指针(与函数指针不同)没有绑定(bind),您可以将它们用于不同的对象。

(this->*f)(10);
(foo.*f)(10);
// etc.

关于c++ - 为什么通过函数指针调用成员函数时需要 "this"前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11212454/

相关文章:

c++ - 无法按索引访问 vector 值

c++ - 将带有自定义项目的部分添加到类文档中?

javascript - 如何在回调中访问正确的“this”?

c++ - 专门针对指向数据成员的指针的模板成员函数

c++ - VC++中通过A类函数指针调用B类成员函数

c++ - ostream 会刷新其他流吗?

c++ - 从多个线程访问随机数引擎

javascript - ‘this’ vs. 'bind.(this)' vs. 将事件传递给事件处理程序,React JS vs. vanilla JavaScript

javascript - 我怎么知道什么时候在 JS 函数上使用 .bind()?

c++ - 如何创建一个充满 C 风格函数指针和 lambda 的 vector (有和没有捕获)