Saltar al contenido

Pasar funciones como argumentos en C++

Bienvenido a nuestro sitio web, aquí vas a encontrar la solucíon de lo que necesitas.

Solución:

La forma más fácil, en mi opinión, es usar una plantilla en lugar de intentar escribir una función con un tipo concreto.

template
void printtime_inplace(string title, Function func)

    //...
    func(title);
    //...

Esto ahora le permitirá tomar cualquier cosa que sea una “función”. Puedes pasarle una función regular, un funtor, un lambda, un std::function, básicamente, cualquier exigible. El compilador eliminará diferentes instancias para usted, pero en lo que respecta a su código, está llamando a la misma función.

Puedes usar std::function para proporcionar dicha plantilla:

#include 
#include 
#include 
#include 

void convert_inplace(std::string& mystr)
std::string convert(const std::string& mystr)
    return mystr;

void bitrot_inplace(std::string& mystr)

template
using fn = std::function;

template
void caller(fn f) 
    typename std::remove_reference::type p;
    ret r = f(p);


template
void caller(fn f) 
    typename std::remove_reference::type p;
    f(p);


int main() 
    auto f1 = fn(convert_inplace);
    auto f2 = fn(convert);
    auto f3 = fn(bitrot_inplace);
    caller(f1);
    caller(f2);
    caller(f3);
    return 0;

Vea la demostración en vivo.

Acuérdate de que tienes la opción de valorar esta división si diste con la solución.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *