OOP, templates et macros dans mql5, subtilités et utilisations - page 19

 
Seric29:

Cette macro sera nulle, pour qu'elle renvoie un résultat, il faut qu'une expression soit calculée, en d'autres termes, il faut appeler une fonction à l'intérieur, j'en suis arrivé à cette conclusion.

Oui, essayez d'abord de compiler ce code "magique-miracle". Certains gars ici fantasment sauvagement, déconnectés de la réalité.

 
Vict:

Je ne sais pas quelle est la tâche ou si vous y creusez, mais à première vue, c'est une autre approche :

Ainsi, vous pouvez remplacer n'importe quelle partie de la fonction (pas nécessairement le remplissage du tableau comme dans mon cas) et l'instancier comme nécessaire.

C'est un peu ringard. Vous jetez un premier coup d'oeil au code et vous pensez : bien, probablement que le tableau sera rempli avec les nombres qui sont passés à la fonction, ou mélangés à cette valeur... mais il s'avère que...

 
Dmitry Fedoseev:

C'est un peu un jeu d'enfant. Vous regardez le code à première vue et vous pensez : eh bien, le tableau sera probablement rempli avec les nombres qui sont passés à la fonction, ou mélangés à cette valeur... mais il s'avère que...

Je ne suis pas impressionné, ok, je suis p****.

 
Vict:

Vous avez un algorithme à l'intérieur duquel vous pouvez placer un sous-algorithme, le "modifier" pour ainsi dire, afin de résoudre une tâche particulière. Il s'agit essentiellement d'un analogue des fonctions virtuelles. L'essentiel est que vous vous êtes demandé, et maintenant vous ne savez pas pourquoi)), vous avez un cadre, à l'intérieur duquel vous mettez une boucle.

Je voulais ajouter du code à ce cadre et faire en sorte que l'ensemble renvoie un résultat, mais mon cadre fonctionne comme un vide et j'essaie de le comprendre. J'ai besoin qu'il fonctionne avec des tableaux de différentes dimensions.

 
Vict:

Appeler une fonction dans laquelle vous passez un pointeur à une autre fonction (corps de boucle, par exemple)

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 ne fonctionne pas avec des pointeurs vers une fonction, même les développeurs n'ont pas fait ça.

Voici ce que j'ai trouvé

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
}
 
Toutes les macros ne peuvent donc pas retourner une valeur, qui sait ?
 
Seric29:
Ainsi, toutes les macros ne peuvent pas retourner une valeur, qui sait ?

Vous ne pouvez pas du tout renvoyer une valeur à partir d'une macro. Une macro est un remplacement d'un morceau de code par un autre morceau de code.

 
Dmitry Fedoseev:

Vous ne pouvez pas du tout renvoyer une valeur à partir d'une macro. Une macro est un remplacement d'un morceau de code par un autre morceau de code.

Je vois, merci pour votre réponse claire et correcte.

 
Ce n'est pas tout à fait exact, la macro peut être développée en un opérateur ternaire? : ou un opérateur virgule (pas dans µl) à partir duquel une valeur peut être retournée.
 
Vict:
Ce n'est pas vraiment vrai, la macro peut être étendue à l'opérateur ternaire? : ou à l'opérateur virgule (pas dans µl) à partir duquel vous pouvez retourner une valeur.

En C++, les opérateurs ternaires sont plus développés, si la condition est vraie, vous pouvez effectuer des actions multiples et mql4 comme avant un accès étroit à la mémoire et au moins depuis 10 ans, les développeurs n'ont pas fait de changements significatifs et n'ont pas créé de fonctions dignes d'intérêt (il n'y a que des fonctions qui fonctionnent avec des couleurs et du texte et rien d'autre - juste de la stupidité).

Raison: