Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 936

 
Igor Makanu:

encore une fois : ce n'est pas parce que vous n'avez pas eu d'erreur de compilation que votre classe de modèle a été incluse - où est l'objet de classe CData ? - Je vois une déclaration de modèle, mais où se trouve cette variable ? - objet ?

si vous avez "un besoin vital" de résoudre la question, alors faites un code entièrement reproductible - complètement sans ..... commentaires à votre discrétion et encore une fois, je ne comprends pas la logique de l'utilisation de la substitution de macro.

c'est peut-être là le problème, j'utilise rarement les macros, au moins si j'utilise une macro je comprends ce qu'elle donne au final, dans votre exemple c'est un mystère pour moi

Oui vous avez raison l'objet n'a pas été créé donc j'ai vérifié

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#define  templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д


#define  Vosmas(a,b,c,d,e) /*return*/(Fun(a,b,c,d,e))//a- массив, 
                                                    //b- номер строки если нужен
                                                    //c,d- номера измерений если нужны и массив многомерный

int Mas[2],Mas2[2][2],Mas3[2][2][2];

int OnInit()
{int Perem=0;
 Perem=Vosmas(Mas,0,0,0,3);
 Print("Vosmas: ",Perem);//результат 3
return(INIT_SUCCEEDED);}

class CData{
public:CData(){};~CData(){};

       int Total(int &mas[]    ,int y1=0){return(mas[y1]);}  
       int Total(int &mas[][]  ,int y1=0/*,int y=0*/){return(mas[y1][0]);}
       int Total(int &mas[][][],int y1=0/*,int y=0,int u=0*/){return(mas[y1][0][0]);}};
       
         
templ(T) T Fun(T &a[],int b,int c,int d,int e){a[b]=e; return (a[b]);}

Je ne vois pas pourquoi j'ai besoin d'un tel langage de programmation et pourquoi j'aurais besoin de telles classes si je ne peux même pas les surcharger, tout est mort et statique.

 
Comment écrire une lettre aux développeurs de mql4 ? Comment voir le code du compilateur, puis-je y ajouter des fonctionnalités pour qu'il ne soit pas si statique ?
 
Seric29:

Oui, vous avez raison, l'objet n'a pas été créé, c'est ce que j'ai vérifié.

En conséquence, la surcharge n'est pas possible, ce qui est un moins, alors pourquoi aurais-je besoin d'un tel langage de programmation et pourquoi aurais-je besoin de telles classes si je ne peux même pas surcharger tout est mort et statique ?

Vraiment ?

Vous ne le saviez pas.

Comment les gens écrivent-ils des choses compliquées alors ? C'est au-delà de l'entendement...

 
Seric29:

La tâche de la macro est d'appeler la fonction de la classe et de passer la valeur à cette fonction, et comme la macro peut prendre un tableau de n'importe quelle dimension, j'essaie de faire un tel schéma. Bien sûr, beaucoup de pierres, mais j'ai besoin d'appeler la fonction à partir de la classe et je ne sais pas comment appeler une fonction simple à partir de la classe (dans mon cas, la méthode Total n'a pas de description) n'est pas écrit dans l'aide, il ya des exemples complexes liés au transfert.

Voici un exemple : une macro prend un tableau de n'importe quelle dimension, il est regrettable que les développeurs aient supprimé ces fonctions qui permettent de travailler normalement avec des éléments complexes.

Vous pouvez le faire sans modèle, mais c'est mieux avec un modèle.

Je ne voulais pas, mais j'ai ouvert le terminal, voilà ton exemple :

#property strict
#property  show_inputs
//+------------------------------------------------------------------+
//#define templ(T)          template<typename T>// задача данного макроса определять int bool double и т.д

#define  Vosmas(a,b,c,d,e)  5
int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart()
  {
   int Perem=0;
   Perem=Vosmas(Mas,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas2,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas3,0,0,0,0);
   Print("Vosmas: ",Perem);//во всех случаях результат 5
  }
//+------------------------------------------------------------------+

J'ai commenté la macro-substitution, le code se compile, donc ça ne fonctionne pas ? J'ai demandé trois fois pourquoi un modèle qui n'est pas utilisé et pourquoi une macro-substitution qui ne fait que dupliquer un mot-clé du langage.

Non seulement je ne comprends pas ce qui est nécessaire, mais je ne comprends pas ce qu'il faut faire avec un code dont une partie ne sera pas compilée.

HH : Si vous essayez de créer un tableau multidimensionnel en utilisant ce modèle ou une macro - à mon avis, cela ne fonctionnera pas, trouvez une solution toute faite en cherchant dans le forum et utilisez

ZS : J'abandonne définitivement, ce n'est pas une question pour moi.

 
Seric29:
Comment écrire une lettre aux développeurs de mql4 ? Comment voir le code du compilateur, puis-je y ajouter des fonctionnalités pour qu'il ne soit pas si statique ?

Pas dans le cas où vous mettez un pantalon sur votre tête :)

 
Artyom Trishkin:

Vraiment ?

Vous ne le saviez pas.

Comment les gens écrivent-ils des choses complexes alors ? Cela dépasse l'entendement...

Eh bien, à quel point pouvez-vous écrire ici si l'accès à la mémoire est refusé pour travailler avec des fonctions dynamiques, même la surcharge n'est pas possible, donc vous devez écrire 1000 lignes de code supplémentaires pour compléter votre programme, lancer des boucles et des variables supplémentaires, donc la performance du programme est 0.

 
Seric29:

Eh bien, qu'est-ce qui est si difficile à écrire si l'accès à la mémoire est refusé, vous ne pouvez pas travailler avec des fonctions dynamiques, même la surcharge est impossible, donc vous devez écrire 1000 lignes de code supplémentaires pour terminer votre programme, lancer des boucles et des variables supplémentaires, donc la performance du programme est 0.

Eh bien, si la structure du programme est initialement morte, oui, il n'y a aucun moyen.

Le programme est écrit à la toute fin. Premièrement, une approche réfléchie de la structure du programme.

Honnêtement, je ne comprends pas pourquoi vous vous battez depuis des mois avec quelque chose qui se fait différemment, et en cinq minutes. Je ne comprends vraiment pas...

 
Igor Makanu:

Je ne voulais pas, mais j'ai ouvert mon terminal, voici votre exemple :

J'ai commenté la macro-substitution, le code se compile, donc ça ne fonctionne pas ? J'ai demandé trois fois pourquoi un motif qui n'est pas utilisé et pourquoi une macro-substitution qui ne fait que dupliquer un mot-clé du langage.

Non seulement je ne comprends pas ce qui est nécessaire, mais je ne comprends pas ce qu'il faut faire avec un code dont une partie ne sera pas compilée.

HH : Si vous essayez de créer un tableau multidimensionnel en utilisant ce modèle ou une macro - à mon avis, cela ne fonctionnera pas, trouvez une solution toute faite en cherchant dans le forum et utilisez

ZS : J'abandonne définitivement, ce n'est pas une question pour moi.

Ici j'ai donné un exemple que la macroVosmas accepte n'importe quel tableau. La seule solution pour les tableaux est d'utiliser des tableaux de même dimension, je ne parle pas de toutes sortes de pointeurs et de références et des fonctions dynamiques qui fonctionnent en c++, et c'est aussi un problème de sortir une fonction en c++, de spécifier le type et d'autres choses, un langage trop statique et tout, vous ne pouvez pas écrire les trucs vraiment cool ici.

 
Seric29:

Ici j'ai donné un exemple que la macroVosmas accepte n'importe quel tableau. La seule solution pour les tableaux est d'utiliser des tableaux de même dimension, je ne parle pas de toutes sortes de pointeurs et de références et des fonctions dynamiques qui fonctionnent en C++, et aussi du problème de la dérivation d'une fonction en C++ spécifier le type et autres bêtises bref un langage trop statique et tout, on ne peut pas écrire des choses vraiment cool ici.

Commencez à lire les bases du C++, MQL a des différences minimales !

ZS : félicitations, vous avez écrit une macro universelle qui peut tout faire, les tableaux sont la chose la plus facile qu'elle peut "manipuler", exemple à reproduire :

#property strict
#define  Vosmas(a,b,c,d,e)  5
int Mas[2],Mas2[2][2],Mas3[2][2][2];//объявил массивы которые будут хранить информацию// обработка с помощью классов должна быть любого типа templ(T)
//+------------------------------------------------------------------+
void OnStart()
  {
   int Perem=0;
   Perem=Vosmas(Mas,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas2,0,0,0,0);
   Print("Vosmas: ",Perem);
   Perem=Vosmas(Mas3,0,0,0,0);
   Print("Vosmas: ",Perem);//во всех случаях результат 5
   
   class CA{public: int a;} A;
   class CB{public: int b;} B;
   class CC{public: int c;} C;
   class CD{public: int d;} D;
   class CE{public: int e;} E;
   Perem=Vosmas(A,B,C,D,E);     Print("Vosmas: ",Perem);//во всех случаях результат 5
   Perem=Vosmas("УРА","Я","УЧУ","MQL","4");     Print("Vosmas: ",Perem);//во всех случаях результат 5
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

commencez à lire les bases du C++, MQL a des différences minimes !

ZS : félicitations, vous avez écrit une macro universelle qui peut tout faire, les tableaux sont la chose la plus facile qu'elle peut "gérer", exemple à suivre :

Eh bien, je voulais m'attaquer à ce problème en passant un tableau dans une macro et en appelant dans la macro une fonction surchargeable et en renvoyant le résultat, ce qui semble être une tâche primitive, mais lorsque vous appelez une fonction surchargeable dans une macro, celle-ci affiche un avertissement indiquant que les fonctions 3 s'avèrent que dans la macro, vous devez écrire un critère qui déterminera laquelle des fonctions surchargeables appeler et là encore, vous devez vous demander comment effectuer cette vérification, en général, l'idée échoue.

Raison: