使用函数指针指向非静态成员函数

时间:2016-11-25 13:09:57

标签: c++ function pointers static this

我正在深入研究非静态成员函数指针的主题,我发现语法最令人不安。这些指针很有趣,因为你可以这样做:

struct MyStruct
{
    void nonStaticMembFunc1(){};
    void nonStaticMembFunc2()
    {
         void (MyStruct::*funcPtr)() = &nonStaticMembFunc1;   // Declare local pointer

         (this->*funcPtr)();   // Use it through this instance

    }
};

因此,如果情况是你总是(据我所知)放弃使用“this”关键字,我试图在这种情况下删除它,并进行以下尝试:

(this->*nonStaticFuncPtr)();    // Normal use, works

(->*function1)();   // Trying to drop "this" keyword            
(*function1)();     // Trying to drop the arrow, this seemed to make sense
(.*function1)();    // Trying the other way  

尝试这一点让我对在非静态成员函数中你所处的范围感到困惑。如果您可以删除关键字,那么您已经在其范围内(如果这是正确的术语),就像您可以放弃使用范围解析::运算符(如果您不需要它)。但我可能完全错了。

1 个答案:

答案 0 :(得分:1)

答案是你不能:

struct MyStruct
{
    void nonStaticMembFunc1(){};
    void nonStaticMembFunc2()
    {
         void (MyStruct::*funcPtr)() = &MyStruct::nonStaticMembFunc1;   // Declare local pointer

         (*funcPtr)(); // See error message below

    }
};
main.cpp: In member function 'void MyStruct::nonStaticMembFunc2()':
main.cpp:9:12: error: invalid use of unary '*' on pointer to member
          (*funcPtr)();   // Use it through this instance
            ^~~~~~~

Live Demo

它是一个成员函数指针调用。这看起来与当前实例上下文分开,因此this不是隐含的。