向我解释类成员方法对std :: function的处理

问题描述

#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()仍然有效。另外,您可以使pFnworld作为参数,无论哪种情况,都需要一个实例来调用非静态成员函数。

PS:请注意,在上面的示例中,可以使用lambda本身实际上并没有必要使用std::functionstd::function的价格通常是您不需要支付的。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...