OOP, modelli e macro in mql5, sottigliezze e usi - pagina 19

 
Seric29:

Questa macro sarà nulla, per restituire un risultato da essa è necessario calcolare un'espressione, in altre parole è necessario chiamare una funzione al suo interno, sono arrivato a questa conclusione.

Sì, prova a compilare questo codice "magico-miracolo" prima. Alcuni ragazzi qui stanno fantasticando selvaggiamente, disconnessi dalla realtà.

 
Vict:

Non so quale sia il compito o se stai scavando lì, ma a prima vista è un altro approccio:

Quindi, potete sostituire qualsiasi parte della funzione (non necessariamente il riempimento dell'array come nel mio caso) e istanziarla come necessario.

È un po' da sfigati. Date una prima occhiata al codice e pensate: bene, probabilmente l'array sarà riempito con quei numeri che sono passati alla funzione, o mischiati a questo valore... ma si scopre che...

 
Dmitry Fedoseev:

È un po' un gioco da ragazzi. Si guarda il codice a prima vista e si pensa: bene, l'array sarà probabilmente riempito con quei numeri che sono passati alla funzione, o mischiati a quel valore... ma si scopre che...

Non sono impressionato, ok, sono p****.

 
Vict:

Avete un algoritmo all'interno del quale potete mettere un sub-algoritmo, "ritoccarlo" per così dire, per risolvere un compito particolare. Essenzialmente è un analogo delle funzioni virtuali. La cosa principale è che ti sei chiesto, e ora non sai perché)), hai una struttura, dentro la quale hai messo un ciclo.

Volevo aggiungere del codice a questo framework e fare in modo che il tutto restituisse un risultato, ma il mio framework funziona a vuoto e sto cercando di capirlo. Ho bisogno che funzioni con array di diverse dimensioni.

 
Vict:

Chiamare una funzione in cui si passa un puntatore a un'altra funzione (corpo del ciclo, per esempio)

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 non funziona con i puntatori a una funzione, nemmeno gli sviluppatori l'hanno fatto.

Ecco qualcosa che ho trovato

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
}
 
Quindi non tutte le macro possono restituire un valore, chi lo sa?
 
Seric29:
Quindi non tutte le macro possono restituire un valore, chi lo sa?

Non si può assolutamente restituire un valore da una macro. Una macro è una sostituzione di un pezzo di codice con un altro pezzo di codice.

 
Dmitry Fedoseev:

Non si può assolutamente restituire un valore da una macro. Una macro è una sostituzione di un pezzo di codice con un altro pezzo di codice.

Capisco, grazie per la tua risposta chiara e corretta.

 
Beh, non proprio, la macro può essere espansa in un operatore ternario?: o operatore virgola (non in µl) da cui può essere restituito un valore.
 
Vict:
Beh, non è proprio vero, la macro può essere espansa in operatore ternario?: o operatore virgola (non in µl) da cui si può restituire il valore.

In C++ gli operatori ternari sono più sviluppati, se la condizione è vera si possono eseguire più azioni e mql4 come prima chiude l'accesso alla memoria e almeno per 10 anni gli sviluppatori non hanno fatto cambiamenti significativi e non hanno creato funzioni degne di nota (ci sono solo funzioni che lavorano con colori e testo e nient'altro - solo stupidità).