Dev - C++ - funcion como parametro

 
Vista:
Imágen de perfil de tom
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

funcion como parametro

Publicado por tom (74 intervenciones) el 31/03/2021 01:38:42
quiero que al llamar a una funcion, se ejecute otra funcion.
puede hacerse asi, DO(void (*f)())
y luego llamar DO( DRAW )
y que DRAW sea otra funcion
yo lo que quiero hacer es que cada vez que llame a la funcion DO, no tenga que entregarle como parametro la funcion DRAW.
que exista otra funcion que establezca la funcion a ejecutar cuando se escribe DO()
espero que se entienda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

funcion como parametro

Publicado por Rodrigo (539 intervenciones) el 31/03/2021 02:14:36
Es DO() un metodo de una clase? Es una funcion global?

Para el primer caso, basta que asignes a un campo de la clase el puntero a la funcion y luego usarlo en la definicion de DO.
Para el segundo caso, basta incluir el prototipo de la funcion invocada al interior de la definicion de DO (o antes de ella) y asegurarse que el linker encuentre un enlace a la definicion que estaras usando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de tom
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

funcion como parametro

Publicado por tom (74 intervenciones) el 31/03/2021 02:52:54
especificamente estoy haciendo una pequeña libreria de interfaz grafica, y esto lo pregunto para poder crear los botones
se supone que al llamar a una funcion, checkeara que boton a sido presionado por el mouse, y ejecutará la funcion de ese boton

por eso, cada boton ademas de tener una hitbox y un bool pressed, debe tener una funcion asociada
la idea es que al crear un boton, se le entrege la funcion que se ejecutará al ser presionado

puedo escribir la funcion a ejecutar manualmente, pero quiero tener muchos botones y es muy tedioso escribir eso
es un poco dificil para mi hablar esto porque apenas entiendo esto de pasar funciones como parametros, pero lo que deseo hacer es simple

este es un emeplo mas simple que describe mi problema:

DO(void (*f)()){
f();
}

main.cpp:

DO( COMER )

luego, en otra parte del main principal
DO( COMER )

comer sea otra funcion, no importa lo que haga

yo quiero evitar tener que escribir COMER a cada rato, quiero que la funcion DO() no reciba parametros, simplemente al ser llamada ejecute la funcion que tiene asociada

y exista otra funcion llamada, SET(void (*f)()), que yo la llame 1 sola ves al inicio del programa y le entrege como parametro "COMER"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

funcion como parametro

Publicado por Rodrigo (539 intervenciones) el 31/03/2021 04:09:57
Aun no se si es C++ o no

Supongamos que no es, por lo que podrias una (horror!) variable global, por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
void (*f)();
 
void SetF(void (*f2)()) {
  f = f2;
}
 
void DO() {
  if( f ) {
    f();
  }
}

Si se trata de una clase, f se convierte en un campo privado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

funcion como parametro

Publicado por Martín (158 intervenciones) el 31/03/2021 10:59:54
Algo básico en C++: invocando una función definida en un objeto.

La función que se va a ejecutar se decide en el momento en que se crea el objeto.

(no usé los nombres DO o DRAW porque los nombres en mayúsculas me sacan sarpullido)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <functional>
 
class Accion {
public:
    Accion(std::function<void(void)> f) : f(f) {}
    void operator()()
    {
        f();
    }
private:
    std::function<void(void)> f;
};
 
void saludo()
{
    std::cout << "hola\n";
}
 
int main()
{
    Accion saludar{ saludo };  // al crear la Accion se define la función que va a invocar
 
    saludar(); // invoca la función ya definida para esta acción.
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar