C++:指向结构中成员函数的指针

C++: Pointer to Member Function within Struct

本文关键字:成员 函数 指针 结构 C++      更新时间:2023-10-16

这是我上一篇文章的后续问题:C++:初始化结构和设置函数指针

我的新问题是如何在结构中调用指向成员的指针函数?我已将以前的代码修改为:

float MyClass::tester(float v){
    return 2.0f*v;
}
struct MyClass::Example{
    float(Scene_7::*MyFunc)(float);
    float DoSomething(float a){
        return (MyFunc)(a);           //ERROR, SEE BELOW FOR OUTPUT
    }
};

然后,我按如下方式设置函数,并将结果输出到调用中:

struct Example e;
e.MyFunc = &MyClass::tester;
std::cerr << e.DoSomething(1.0f) << std::endl;

我收到以下错误:必须使用'.' 或 '->' 调用指向成员的指针函数...

问题是我不知道该怎么做。我猜我必须在DoSomething中调用类似 this->*(myFunc)(a) 的东西,但this引用结构。我尝试搜索"在结构指针到成员函数中",但找不到任何内容。任何帮助或建议都会很棒。我觉得我很接近,但此时这只是语法问题。

我直言,.*->*的运算符优先级已损坏。您需要将操作数括在括号中才能调用。

return (this->*MyFunc)(a);

否则,编译器认为您正在执行this->*(MyFunc(a)),这显然是无效的。

有趣的是,(this->*MyFunc)作为独立表达式也是无效的。需要当场打电话。

我不知道你是否有其他错误,做缺乏代码,但你以错误的方式调用成员函数,你这样称呼它们:

return (obj->*MyFunc)(6);

我不确定您是否可以使用this代替上面行的obj,因为从声明中,您需要一个指向 Scene_7 类型的对象的指针,因此您需要知道代码中该位置的正确类型的指针。

请记住,. 运算符的优先级高于 * 运算符。因此,在处理点和结构等时,您将需要使用偏执或->运算符,这意味着指针指向什么。