这是我想做的。我有一个函数指针需要这样的函数:
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
有没有办法在不使用静态函数的情况下完成这项工作?
由于
答案 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);
}