La cosa es así,
hay dos clases, la función miembro en la clase A debe usarse como la función de devolución de llamada de la clase B.
Al buscar los datos, se encuentra que las funciones miembro no estáticas de clases anteriores a c ++ 11 no se pueden usar como funciones de devolución de llamada y el compilador informará un error. Esto se debe a que la función miembro de la clase tiene un puntero oculto, y los parámetros del puntero de función de la función de devolución de llamada se determinan de antemano, siempre que la mayoría de ellos use funciones ordinarias o funciones estáticas como el puntero de devolución de llamada anterior.
Después de c ++ 11 std :: bind puede resolver este problema. P.ej:
class A
{
public:
bool make_callback(int a, std::string& s);//类的非静态成员函数
}
//声明函数指针类型,返回值类型bool, 参数类型int和std::string的引用
using callback = std::function<bool(int, std::string&)>;
class B
{
public:
void setfunc(callback cb)
}
int main()
{
using std::placeholders::_1;//占位符
using std::placeholders::_2;
B b;
A a;
// 记住,类的成员非静态函数就用&,传入的第一个参数必须是this,_1,_2表示回调函数的显示的参数
b.setfunc(std::bind(&A::make_callback,&a,_1,_2))
}
Referencia:
https://blog.csdn.net/sinat_27953939/article/details/97107766 es
más detallada que la mía.