问题描述
#include <iostream>
#include <functional>
class world
{
public:
void hello(){
std::cout << "wow" << std::endl;
}
};
int main(void)
{
std::function<world&,void()> pFn = &world::hello; //is this right???
};
我尝试了这个,但是不起作用:( 怎么处理呢? 请给我解释一下好方法
解决方法
首先,std::function
是:
template< class > class function; /* undefined */ template< class R,class... Args > class function<R(Args...)>;
您的std::function<world&,void()>
没有任何意义。您应该选择要存储在功能对象中的功能类型。
接下来,您需要一个world
来调用其非静态成员函数之一。
您可以执行以下操作:
#include <iostream>
#include <functional>
class world
{
public:
void hello(){
std::cout << "wow" << std::endl;
}
};
int main(void)
{
//std::function<world&,void()> pFn = &world::hello; //is this right???
world w;
std::function<void()> pFn = [&w](){ w.hello();};
pFn();
}
致电w
时,请确保pFn()
仍然有效。另外,您可以使pFn
以world
作为参数,无论哪种情况,都需要一个实例来调用非静态成员函数。
PS:请注意,在上面的示例中,可以使用lambda本身实际上并没有必要使用std::function
。 std::function
的价格通常是您不需要支付的。