今天看书学习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; }