如何使用结构内的函数指针调用私有函数?

时间:2017-06-29 04:48:11

标签: c++

我将在下面提供示例代码。我想使用函数指针从公共函数c::LocFn2调用c::PubFn。当我评论该行pp[1].fp();代码完美无缺时。请帮帮我。

#include <iostream>

using namespace std;

class c
{
public:
    void PubFn();
private:
    struct p
    {
        int a;
        int b;
        int (c::*fp)();
    };
    static const p pp[];

    int LocFn1();
    int LocFn2();
};

void c::PubFn() {
    cout << "Val = "<< pp[1].a << "\n"; //It prints 3 correctly. 
    pp[1].fp(); //Here I wanna call c::LocFn2 using the function pointer.
}

int c::LocFn1() {
    cout << "This is loc fn1\n";
    return 0;
}
int c::LocFn2() {
    cout << "This is loc fn2\n";
    return 0;
}

const c::p c::pp[] =  { {1, 2, &c::LocFn1}, {3, 4, &c::LocFn2} };

int main()
{
    c obj;

    obj.PubFn();     
}

1 个答案:

答案 0 :(得分:1)

使用指向成员的操作符->*

(this->*(pp[1].fp))();

额外的括号是必要的,因为函数调用操作符的优先级高于指向成员的操作符。