今天看书学习std::function作为回调函数(std::function<void(int)>可以接受函数,为返回值为void,参数为一个int的函数),实验了如下代码:
#include <iostream>
#include <functional>
class A
{
    std::function<void()> m_callback;
public:
    A(const std::function<void()>& f) : m_callback(f) {}

    void notify()
    {
        m_callback();
    }
};

class Foo
{
public:
    /*void operator()(void)
    {
        std::cout << "__FUNCTION__" << std::endl;
    }*/
    void print()
    {
        std::cout << "__FUNCTION__" << std::endl;
    }
};

int main(void)
{
    Foo foo;
    A aa(foo.print);
    aa.notify();

    return 0;
}

但是报错了,错误为:
图片说明
说明,类成员函数不能作为对象.函数的方法直接传递给std::function,这是一种错误的用法,对象.函数的方法要么是foo.print()直接使用,要么是静态函数是Foo::print()使用,所以改成如下代码即可编译通过,运行无误:

#include <iostream>
#include <functional>
class A
{
    std::function<void()> m_callback;
public:
    A(const std::function<void()>& f) : m_callback(f) {}

    void notify()
    {
        m_callback();
    }
};

class Foo
{
public:
    /*void operator()(void)
    {
        std::cout << "__FUNCTION__" << std::endl;
    }*/
    static void print()
    {
        std::cout << "__FUNCTION__" << std::endl;
    }
};

int main(void)
{
    //Foo foo;
    A aa(Foo::print);
    aa.notify();

    return 0;
}