提供一个可实现的类的方法作为函数指针?

时间:2010-11-08 02:31:36

标签: c++

这是我想做的。我有一个函数指针需要这样的函数:

void func(int a);

所以我有一个班级:

 class Foo {
    public:
    void func(int a);
    };

    Foo *foo = new Foo;

    something->setFunction(foo->func);

或在我的情况下:

testWidget[count] = new TestWidget;
            testWidget[count]->eventMouseClick.addHandler(testWidget[0]->silly);

但是这给了我:

  

错误5错误C3867:   'TestWidget ::傻':函数调用   缺少参数列表;使用   '& TestWidget ::傻'来创建一个   指针   成员c:\ users \ josh \ documents \ visual   工作室   2008 \ projects \ agui \ alleg_5 \ main.cpp 190

有没有办法在不使用静态函数的情况下完成这项工作?

由于

2 个答案:

答案 0 :(得分:1)

  

有没有办法在不使用静态函数的情况下完成这项工作?

没有。您不能将指向成员函数的指针转换为普通函数指针。

如果回调接受了任何可调用对象(例如,std::function),那么您可以将对象绑定到成员函数并传递结果;遗憾的是,您无法将该结果转换为普通函数指针。

答案 1 :(得分:0)

你的问题对我来说不是很清楚。但是编译器的错误消息让我觉得你可能想要这样的something->setFunction(&foo->func);

如果出现重载,示例可能会有所帮助

struct T{
   void func(int){}
   void func(double){}
};


void f(void (T::*f)(int)){}
void f(void (T::*f)(double)){}

int main(){
   void (T::*fi)(int) = &T::func;
   void (T::*fd)(double) = &T::func;

   f(fi);
   f(fd);
}