Recientemente tuve algo de experiencia con punteros de función en C. Continuando con la tradición de responder sus propias preguntas, decidí hacer un pequeño resumen de los conceptos básicos, para aquellos que necesitan una rápida inmersión en el
Un puntero de función es un puntero a una función, que se puede almacenar en una variable. Permite una elección en tiempo de ejecución de qué función ejecutar.
Recientemente tuve algo de experiencia con punteros de función en C. Continuando con la tradición de responder sus propias preguntas, decidí hacer un pequeño resumen de los conceptos básicos, para aquellos que necesitan una rápida inmersión en el
En C ++, ¿cuándo y cómo utiliza una función de devolución de llamada? EDITAR: Me gustaría ver un ejemplo simple para escribir una función de devolución de
Tengo un método que tiene aproximadamente diez líneas de código. Quiero crear más métodos que hagan exactamente lo mismo, excepto por un pequeño cálculo que cambiará una línea de código. Esta es una aplicación perfecta para pasar un puntero de función para reemplazar esa línea, pero Java no tiene...
Estoy tratando de almacenar un std::tuplenúmero variable de valores, que luego se utilizarán como argumentos para una llamada a un puntero de función que coincida con los tipos almacenados. He creado un ejemplo simplificado que muestra el problema que estoy luchando por resolver: #include...
Siempre me he quedado un poco perplejo cuando leía el código de otras personas que tenía typedefs para punteros a funciones con argumentos. Recuerdo que me tomó un tiempo llegar a esa definición al tratar de entender un algoritmo numérico escrito en C hace un tiempo. Entonces, ¿podría compartir sus...
¿Por qué funciona lo siguiente? void foo() { cout << "Foo to you too!\n"; }; int main() { void (*p1_foo)() = foo; void (*p2_foo)() = *foo; void (*p3_foo)() = &foo; void (*p4_foo)() = *&foo; void (*p5_foo)() = &*foo; void (*p6_foo)() = **foo; void (*p7_foo)() =...
¿Es posible pasar una función lambda como puntero de función? Si es así, debo estar haciendo algo incorrectamente porque recibo un error de compilación. Considere el siguiente ejemplo using DecisionFn = bool(*)(); class Decide { public: Decide(DecisionFn dec) : _dec{dec} {} private: DecisionFn...
Acabo de ver una foto hoy y creo que agradecería las explicaciones. Así que aquí está la imagen: Esto me pareció confuso y me pregunté si tales códigos son prácticos. Busqué en Google la imagen y encontré otra imagen en esta entrada de reddit, y aquí está esa imagen: ¿Entonces esta "lectura...
¿Hay alguna manera de pasar una función de devolución de llamada en un método Java? El comportamiento que intento imitar es un delegado .Net que se pasa a una función. He visto personas sugiriendo crear un objeto separado, pero eso parece excesivo, sin embargo, soy consciente de que a veces el...
Para una clase, quiero almacenar algunos punteros de función para funciones miembro de la misma clase en un objeto de mapalmacenamiento std::function. Pero fallo al principio con este código: class Foo { public: void doSomething() {} void bindFunction() { // ERROR
¿Cómo debo usar la matriz de punteros de función en C? ¿Cómo puedo
He encontrado Ccódigo que imprime de 1 a 1000 sin bucles o condicionales : pero no entiendo cómo funciona. ¿Alguien puede leer el código y explicar cada línea? #include <stdio.h> #include <stdlib.h> void main(int j) { printf("%d\n", j); (&main + (&exit -...
Esto puede ser algo común y trivial, pero parece que tengo problemas para encontrar una respuesta concreta. En C # hay un concepto de delegados, que se relaciona fuertemente con la idea de punteros de función de C ++. ¿Existe una funcionalidad similar en Java? Dado que los punteros están algo...
He leído que convertir un puntero de función en un puntero de datos y viceversa funciona en la mayoría de las plataformas, pero no se garantiza que funcione. ¿Por qué es este el caso? ¿No deberían ser ambas direcciones simplemente en la memoria principal y, por lo tanto, ser...
La pregunta es la siguiente: considere este código: #include <iostream> class aClass { public: void aTest(int a, int b) { printf("%d + %d = %d", a, b, a + b); } }; void function1(void (*function)(int, int)) { function(1, 1); } void test(int a,int b) { printf("%d - %d = %d", a , b ,...
¿Cómo obtengo un puntero de función para una función miembro de clase y luego llamo a esa función miembro con un objeto específico? Me gustaría escribir: class Dog : Animal { Dog (); void bark (); } … Dog* pDog = new Dog (); BarkFunction pBark = &Dog::bark; (*pBark) (pDog); … Además, si...
Estaba jugando con lambdas de C ++ y su conversión implícita a punteros de función. Mi ejemplo inicial fue usarlos como devolución de llamada para la función ftw. Esto funciona como se esperaba. #include <ftw.h> #include <iostream> using namespace std; int main() { auto callback...
Me gustaría configurar un puntero de función como miembro de una clase que es un puntero a otra función en la misma clase. Las razones por las que hago esto son complicadas. En este ejemplo, me gustaría que la salida fuera "1" class A { public: int f(); int (*x)(); } int A::f() { return...
Digamos que tengo una función que acepta un void (*)(void*)puntero de función para usar como devolución de llamada: void do_stuff(void (*callback_fp)(void*), void* callback_arg); Ahora, si tengo una función como esta: void my_callback_function(struct my_struct* arg); ¿Puedo hacer esto de...
No puedo resolver esto: int main() { int (*) (int *) = 5; return 0; } La asignación anterior se compila con g ++ c ++ 11. Sé que int (*) (int *)es un puntero a una función que acepta un (int *)argumento como y devuelve un int, pero no entiendo cómo podrías equipararlo a 5. Al principio...