Las funciones miembro tienen un parámetro de puntero implícito this
. ¿Por qué std::function
acepta esta firma, entonces, donde S es una clase simple? (complete sample)¿Por qué std :: function acepta una referencia en la firma?
std::function<void(S &)> func = &S::foo;
Calling es que funciona, también, y distingue los objetos:
S s1 = {5};
S s2 = {6};
func(s1); //prints 5
func(s2); //prints 6
Lo que normalmente se esperaría es que necesita un puntero, que funciona así: (complete sample)
std::function<void(S * const)> func = &S::foo;
S s1 = {5};
S s2 = {6};
func(&s1); //prints 5
func(&s2); //prints 6
¿Por qué la primera funciona cuando paso una referencia a la función miembro cuando el parámetro implícito this
es un puntero?
Eso fue una lectura muy informativa, gracias. Tiene mucho más sentido cuando se considera que 'std :: function' es independiente de los punteros de función sin procesar y tiene el poder de hacer lo que quiera para aumentar la usabilidad de lo que está envolviendo. – chris