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

时间:2013-12-17 00:08:56

标签: c++ function pointers struct member

这是我之前发布的帖子的后续问题:C++: Initializing Struct and Setting Function Pointer

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

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;

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

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

3 个答案:

答案 0 :(得分:0)

.*->*的运算符优先级是,恕我直言,打破了。您需要将操作数包装在括号中以便调用。

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

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

有趣的是,作为独立表达式的(this->*MyFunc)也是无效的。 需要在现场调用。

答案 1 :(得分:0)

我无法判断你是否有其他错误,缺少代码,但你以错误的方式调用成员函数,你这样称呼它们:

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

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

答案 2 :(得分:0)

请记住。运算符的优先级高于*运算符。因此,在处理指针和结构等时,您需要使用paranthesis或 - &gt;运算符,表示指针指向什么。