C++ 提供一个可实例化的类';s方法作为函数指针?

C++ 提供一个可实例化的类';s方法作为函数指针?,c++,C++,这是我想做的。我有一个函数指针,它需要这样一个函数: 无效函数(int a) 所以我有一门课: class Foo { public: void func(int a); }; Foo *foo = new Foo; something->setFunction(foo->func); 就我而言: testWidget[count] = new TestWidget; testWidget[count]->

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

无效函数(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::Styly':函数调用 缺少参数列表;使用 创建一个 指向 成员c:\users\josh\documents\visual 演播室 2008\projects\agui\allge_5\main.cpp 190

有没有一种不使用静态函数就可以实现的方法

谢谢

有没有一种不使用静态函数就可以实现的方法

不可以。不能将指向成员函数的指针转换为普通函数指针


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

您的问题对我来说不是很清楚。但是来自编译器的错误消息让我觉得您可能想要这样的东西
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);
}

我如何使用std::function使最终用户像上面一样容易?您需要更改
setFunction
以使用
std::function
,而不是
void(*)(int)
(或
boost::function
std::tr1::function
)std::tr1::function c++2003兼容吗?@Milo:不,它是tr1的一部分(因此它位于
std::tr1
名称空间中)。Boost.Function应该在任何C++03编译器上编译。