C++ 提供一个可实例化的类';s方法作为函数指针?
这是我想做的。我有一个函数指针,它需要这样一个函数: 无效函数(int a) 所以我有一门课: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]->
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编译器上编译。