使用C ++非静态成员函数作为回调和类范围问题

时间:2014-06-15 15:09:55

标签: c++ class callback function-pointers static-members

我的代码包含以下内容:

1)A.h(不能被我改变,因为它是由其他人定义的)

typedef void (*fnctPtr)(int input);

class A
{
    A(fnctPtr func);  //Constructor for A
    //... Other details omitted
};

2)B.h(我的代码)

#include "A.h"

class B
{
    public:
      B() : m_a(m_private_method){};  //Ptr to non static method.

      void m_private_method(int input);
      A m_a;  //Member variable
};

3)一个简单的main.cpp声明和B

的实例
#include <iostream>
#include "B.h"

int main()
{
    B b;
    return 0;
}

它不编译,因为m_a需要使用void(*)(int input)类型的fnct指针进行初始化,而不是void(B :: *)(int input)。

关于如何实现我想要的任何建议?

谢谢

1 个答案:

答案 0 :(得分:1)

如果您真的遇到typedef void (*fnctPtr)(int input);,那么您必须提供一个指向函数的指针,该函数将int作为参数并且不返回任何内容。

当你'提供B类的int指针成员函数并返回nothng时,你真的提供了一些可以看作的东西:

  • 任一函数采用两个参数,类B的实例和int
  • 或需要在B实例中查找的虚拟函数,以了解调用两个参数(Bint)的函数。

没有办法让任何符合第一个定义的东西。

你可能会发现一个hack(保持一个全局实例并在辅助函数中使用它),但这很大程度上取决于完整的问题。