使用指向函数的指针访问成员变量

Member variable access with pointer-to-function

本文关键字:指针 访问 成员 变量 函数      更新时间:2023-10-16

有没有办法让类成员函数指针指向的函数访问函数指针类的成员变量? 还是必须将成员变量传递给函数?

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"

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);