c ++ 11: std :: vincular

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.

Supongo que te gusta

Origin blog.csdn.net/ynshi57/article/details/111412224
Recomendado
Clasificación