我正在深入研究非静态成员函数指针的主题,我发现语法最令人不安。这些指针很有趣,因为你可以这样做:
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
尝试这一点让我对在非静态成员函数中你所处的范围感到困惑。如果您可以删除关键字,那么您已经在其范围内(如果这是正确的术语),就像您可以放弃使用范围解析::运算符(如果您不需要它)。但我可能完全错了。
答案 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
^~~~~~~
它是一个成员函数指针调用。这看起来与当前实例上下文分开,因此this
不是隐含的。