Erreurs, bugs, questions - page 1891

 
Konstantin:
Si nous transférons le pointeur de haut en bas, c'est-à-dire vers le parent, puis vers un autre endroit de la portée, les champs du descendant seront disponibles à cet endroit ?

Oui, voici un exemple qui illustre votre question :

class CLASS1
  {
public:
   int               i;
  };
class CLASS2 : public CLASS1
  {
  };
void OnStart()
  {
   CLASS1 _object;
   CLASS2 *_ptr=dynamic_cast<CLASS2 *>(&_object);

   if(!_ptr)
      Print("CLASS1 -> CLASS2 failed, null");

   CLASS2 *my=new CLASS2;
   CLASS1 *my_ptr=my;
   CLASS2 *my_ptr2=dynamic_cast<CLASS2 *>(my_ptr);

   if(my_ptr2)
     {
      Print("CLASS2 -> CLASS1 -> CLASS2 ok");
      my_ptr2.i=1;
     }
   Print("Value: ",my.i);
  }
et la sortie :
2017.05.13 18:34:50.341 cast (EURUSD,H1)        CLASS1 -> CLASS2 failed, null
2017.05.13 18:35:18.933 cast (EURUSD,H1)        CLASS2 -> CLASS1 -> CLASS2 ok
2017.05.13 18:35:20.110 cast (EURUSD,H1)        Value: 1

D'abord, nous vérifions le casting non résolu de bas en haut et obtenons NULL. C'est exact.

Ensuite, nous créons un objet CLASS2, nous lui attribuons une référence à sa classe parente (il est important de comprendre ici que l'environnement sait dynamiquement que le type original de l'objet CLASS2 est stocké dans ses méta-informations). Ensuite (pour répondre à votre question), il faut effectuer une conversion dynamique (en vérifiant le droit de conversion en fonction des méta-informations de l'objet source) de la référence CLASS1 à CLASS2.

Nous vérifions le résultat du casting et l'écrivons dans la variable i = 1. Enfin, nous sortons la valeur de i, en faisant référence à l'objet créé à l'origine.

Tout fonctionne correctement et conformément aux spécifications (y compris la spécification dynamic_cast du C++ lui-même).

 
Комбинатор:

Vous êtes sûr ? Parce que dynamic_cast est le plus souvent utilisé pour la conversion ascendante, du parent à la descendance.

De plus, dans MQL, il coule parfaitement de bas en haut, même quand il ne devrait pas :

Exactement :

N'oubliez pas de mettre à jour les dernières versions. Je teste actuellement sur la 1598, qui a été récemment postée en version zippée dans ce fil de discussion, je crois.

 
Renat Fatkhullin:

N'oubliez pas de mettre à jour les dernières versions.

Oui, l'ancienne version.

Renat Fatkhullin:

C'est vrai, on ne peut pas conduire de bas en haut, seulement de haut en bas. C'est pour des raisons de sécurité.

Vous devriez effacer celui-ci, il est trompeur et contredit directement le fonctionnement de dynamic_cast.
 
Комбинатор:

Oui, l'ancienne version.

Vous gommez celui-ci, il est trompeur et contredit directement le fonctionnement de dynamic_cast

Dans le cadre de l'exemple soulevé de l'affrontement CLASS1 -> CLASS2, vous avez raison. C'est le genre de casting que les gens ont la plupart du temps en tête.

De plus, c'est le "vous ne pouvez pas lancer de bas en haut, seulement de haut en bas" qui est au cœur du contrôle de sécurité dynamic_cast.

Ceux qui savent ce qu'ils font comprennent l'essence du dynamic_cast.

 
Renat Fatkhullin:

N'oubliez pas de mettre à jour les dernières versions. Je teste actuellement sur 1598, qui a été récemment posté sous forme de zip dans ce fil de discussion, je crois.

Dans quel fichier exe se trouvent le compilateur et l'exécuteur ?

En ce moment, MT4b1080 exécute MEb1599. Veuillez expliquer ce que font metaeditor.exe et terminal.exe.

 
fxsaber:

Dans quel fichier exe se trouvent le compilateur et l'exécuteur ?

Le MT4b1080 exécute maintenant MEb1599. Veuillez expliquer ce que font metaeditor.exe et terminal.exe.

Le compilateur est le même pour les deux plateformes. Il est dans metaeditor.exe
 
Renat Fatkhullin:
Le compilateur est le même pour les deux plateformes. Il est dans metaeditor.exe
Et l'exécuteur, qui vérifie le même dynamic_cast, dans terminal.exe ?
 
fxsaber:
Et l'exécuteur, qui vérifie le même dynamic_cast, dans terminal.exe ?
Bien sûr.
 
Renat Fatkhullin:
Une autre question comme celle-ci

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2017.05.11 13:26

Pourquoi un tel code EX5
void OnStart() {}

Est-ce que ça pèse 5kb ?

 
fxsaber:
Une autre question.
Les performances de la bande de roulement.
Raison: