我将在下面提供示例代码。我想使用函数指针从公共函数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();
}
答案 0 :(得分:1)
使用指向成员的操作符->*
。
(this->*(pp[1].fp))();
额外的括号是必要的,因为函数调用操作符的优先级高于指向成员的操作符。