【问题标题】:Member variable access with pointer-to-function使用指向函数的成员变量访问
【发布时间】:2014-12-13 16:54:58
【问题描述】:

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

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' 未在此范围内声明

【问题讨论】:

  • 您需要明确地将 this 或 *this 传递给 foo。
  • 我建议您在下次粘贴之前先将代码分隔开。否则很难回答。
  • foo() 实际上不是您班级的成员!
  • 您必须将一些信息传递给独立函数(整个类对象或成员)。

标签: c++


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多