通过 class 成员方法向我解释 std::function 处理

Explain me about std::function handling by class member method

#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 来调用其 non-static 成员函数之一。

您可以做的是:

#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();
}

调用pFn()时需要确保w还活着。或者你可以让 pFn 接受一个 world 作为参数,在任何一种情况下你都需要一个实例来调用 non-static 成员函数。

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