有没有办法让类成员函数指针指向的函数访问函数指针类的成员变量?或者我是否必须将成员变量传递给函数?
class A {
public:
int var;
void(*fooPtr) (void);
//ctor
A(void(*funcPtr)(void)) :fooPtr(funcPtr){}
};
void foo(void) {
int test = var;
}
A classInstance(&foo);
编译错误:' var'未在此范围内声明
答案 0 :(得分:0)
foo()不是A类的成员。您只需将指向函数的指针传递给构造函数。您必须将指针或对类实例的引用传递给foo()函数,以便它可以访问var
实例。
class A {
public:
int var;
void(*fooPtr) (const A&);
//ctor
A(void(*funcPtr)(const A&)) :fooPtr(funcPtr){}
};
void foo(const A &a) {
int test = a.var;
}
A classInstance(&foo);
使用typeddefs更好地避免使用这个详细的函数指针构造。
class A {
typedef void(*MyPtr)(const A&);
public:
int var;
MyPtr fooPtr;
A(MyPtr fooPtr) :fooPtr(fooPtr){}
};
void foo(const A &a) {
int test = a.var;
}
A classInstance(&foo);