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)