今天看书学习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;
}
京公网安备 11010502036488号