要满足“必须是一个非静态成员函数,且必须有声明的typedef对象”的要求,可以按照以下步骤进行解决:
class Foo {
public:
typedef void (Foo::*FuncPtr)();
// 其他成员和函数声明
};
void Foo::Bar(FuncPtr func) {
// 具体的函数实现
// 通过指针调用其他非静态成员函数
(this->*func)();
}
Foo foo;
foo.Bar(&Foo::Baz);
这样,就满足了“必须是一个非静态成员函数,且必须有声明的typedef对象”的要求。