OOP, plantillas y macros en mql5, sutilezas y usos - página 19

 
Seric29:

Esta macro será nula, para devolver un resultado de la misma se necesita que se calcule una expresión, es decir, que se llame a una función dentro de la misma, he llegado a esta conclusión.

Sí, intenta compilar este código "mágico-milagroso" primero. Algunos tipos aquí están fantaseando salvajemente, desconectados de la realidad.

 
Vict:

No sé cuál es la tarea o si estás excavando allí, pero a primera vista es otro enfoque:

Por lo tanto, usted puede reemplazar cualquier parte de la función (no necesariamente de llenado de la matriz como es en mi caso) y instanciar como sea necesario.

Es un poco tonto. Echas un primer vistazo al código y piensas: bueno, probablemente el array se llenará con los números que se pasen a la función, o se barajará ese valor... pero resulta que...

 
Dmitry Fedoseev:

Es un poco complicado. Uno mira el código a primera vista y piensa: bueno, el array probablemente se llenará con los números que se pasen a la función, o se barajará ese valor... pero resulta que...

No estoy impresionado, vale, estoy p****.

 
Vict:

Tienes un algoritmo dentro del cual puedes meter un subalgoritmo, "retocarlo" por así decirlo, para resolver una tarea concreta. Esencialmente es un análogo de las funciones virtuales. Lo principal es que te preguntaste, y ahora no sabes por qué)), tienes un marco, dentro del cual pones un bucle.

Quería añadir código a este framework y que todo devolviera un resultado, pero mi framework funciona como void y estoy intentando resolverlo. Necesito que funcione con matrices de diferentes dimensiones.

 
Vict:

Llamar a una función en la que se pasa un puntero a otra función (cuerpo del bucle, por ejemplo)

int for3(int a, int b, int c, void(*loop)()) {
        for(int i=0; i<a; i++)
                for(int j=0; j<b; j++)
                        for(int k=0; k<c; k++) 
                                loop();
        return 4;
}


mql4 no funciona con punteros a una función ni siquiera los desarrolladores lo hicieron.

Aquí hay algo que encontré

typedef int(*MyFuncType)(int,int);

int addition (int a, int b)
{ return (a+b); }

int subtraction (int a, int b)
{ return (a-b); }

int operation (int x, int y, MyFuncType myfunc)
{
   int g;
   g = myfunc(x,y);
   return (g);
}

int OnInit()
{
   int m,n;
   m = operation (7, 5, addition);
   n = operation (20, m, subtraction);
   Print(n);
   return(INIT_FAILED);  //just to close the expert
}
 
Así que no todas las macros pueden devolver un valor, ¿quién sabe?
 
Seric29:
Así que no todas las macros pueden devolver un valor, ¿quién sabe?

No se puede devolver un valor de una macro en absoluto. Una macro es la sustitución de un fragmento de código por otro.

 
Dmitry Fedoseev:

No se puede devolver un valor de una macro en absoluto. Una macro es la sustitución de un fragmento de código por otro.

Ya veo, gracias por su respuesta clara y correcta.

 
Bueno, no es del todo correcto, la macro puede expandirse en un operador ternario?: o un operador coma (no en µl) del que se puede devolver un valor.
 
Vict:
Bueno, en realidad no es cierto, la macro se puede expandir en el operador ternario?: o en el operador coma (no en µl) desde el que se puede devolver el valor.

En C++ los operadores ternarios están más desarrollados, si la condición es verdadera se pueden realizar múltiples acciones y mql4 como antes cierra el acceso a la memoria y al menos desde hace 10 años los desarrolladores no han hecho cambios significativos y no han creado funciones dignas de mención (sólo hay funciones que trabajan con colores y texto y nada más, una estupidez).