"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo almacenar punteros de funciones miembro en objetos genéricos `std::function`?

¿Cómo almacenar punteros de funciones miembro en objetos genéricos `std::function`?

Publicado el 2024-12-21
Navegar:489

How to Store Member Function Pointers in Generic `std::function` Objects?

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::function f = 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::function f = 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::function f = [=](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.

Último tutorial Más>

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