Almacenamiento de punteros de función miembro en objetos std::function genéricos
Al intentar almacenar punteros de función miembro de una clase particular en un mapa usando std::function objetos, los desarrolladores pueden encontrar un error: "el término no se evalúa como una función que toma 0 argumentos". Este error surge al asignar el puntero de la función miembro directamente al objeto std::function.
El quid de la cuestión radica en el hecho de que las funciones miembro no estáticas requieren un puntero "this" implícito como primer argumento. . Para rectificar esto, el primer argumento debe estar vinculado explícitamente.
Solución:
std::functionf = std::bind(&Foo::doSomething, this);
Este enfoque vincula efectivamente el puntero "this" como primer argumento, permitiendo que el objeto std::function capture correctamente el miembro function.
Manejo de funciones con parámetros:
Para funciones miembro con parámetros, se deben especificar marcadores de posición para indicar la posición de los argumentos enlazados.
using namespace std::placeholders; std::functionf = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
Sintaxis de C 11 Lambda:
Si el compilador admite lambdas de C 11, se puede utilizar un enfoque más conciso:
std::functionf = [=](int a, int b) { this->doSomethingArgs(a, b); };
Al seguir estas técnicas, los desarrolladores pueden almacenar e invocar eficazmente punteros de funciones miembro utilizando objetos std::function genéricos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3