Caractéristiques du langage mql5, subtilités et techniques - page 38

 
fxsaber:

Fonctions rudimentaires (non requises)

  • StringToDouble
  • StringToInteger
  • StringToTime
  • StringToColor
  • StringAdd
  • StringConcatenate
  • GetPointer


Pourquoi ?
 
Konstantin:
Pourquoi ?
Tout se fait par le biais des opérateurs appropriés.
 
fxsaber:
Tout se fait par le biais des opérateurs appropriés.

Je ne comprends pas bien, donnez-moi un exemple.
 
Konstantin:

Je ne comprends pas bien, donnez-moi un exemple.

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

Particularités du langage mql5, subtilités et astuces

fxsaber, 2017.04.26 15:16

Tous les types standard sont adaptés les uns aux autres
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Résultat

1
1.23

 
fxsaber:



ah, voilà )) laissez-les avoir maintenant qu'ils les ont )) sinon le code va soudainement cesser de fonctionner comme ce fut le cas avec les structures, au moins l'union a été introduite et dans un sens nous pouvons nous en sortir avec une béquille ))
 
fxsaber:

Fonctions pratiques (non nécessaires)

  • GetPointer

Et cette fonction est dupliquée par quoi ?
 
Vasiliy Pushkaryov:
Et cette fonction est dupliquée par quoi ?
& Objet
 

Utilisation de l'union au lieu des structures de coulée

Depuis la version 1596, la conversion explicite de structures de différents types entre elles est interdite. Un tel exemple qui fonctionne dans les anciennes versions ne compilera pas maintenant :

struct struct_double
{
   double value;
}sd;

struct struct_long
{
   ulong value;
}sl;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   sl = (struct_long)sd;
}
cannot cast 'struct_double' to 'struct_long'    CastingValues.mq5       33      9

Cependant, il est désormais possible de combiner des données dans une structure d'union dans MQL. Pour cette raison, il est possible d'effectuer une conversion de type en utilisant une union :

union struct_union
{
   double d_value;
   ulong  l_value;
}su;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   su.l_value = 0;
   su.d_value = 3.14159;
   printf((string)su.l_value);
}
2017.04.27 13:20:03.375 CastingValues (Si-6.17,M1)      4614256650576692846

Cette structure est déjà disponible dans les nouvelles constructions.

p.s. Demandez aux développeurs de commencer à corriger la documentation de casting: https://www.mql5.com/ru/docs/basis/types/casting

 
Vasiliy Sokolov:

Utilisation de l'union au lieu des structures de coulée

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

Bibliothèques : TypeToBytes

fxsaber, 2017.04.26 10:49

Possibilité de moulage à structure aléatoire
struct STRUCT2
{
  MqlTick Tick;
};

// Кастинг произвольных простых структур
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Аналог классического кастинга STRUCT2 Struct2 = (STRUCT2)Tick;
union ne permet pas le casting pour les structures avec constructeur personnalisé et/ou opérateur de copie.
 
fxsaber:
Union ne permet pas le casting pour les structures avec constructeur personnalisé et/ou opérateur de copie.

Il n'a pas été question de remplacer complètement le casting par un syndicat.

p.s. J'ai regardé votre code :

class CASTING
  {
  public:
    template <typename T1>
    static const T Casting( const T1 &Value )
    {
  #ifdef  TYPETOBYTES_FULL_SLOW
      T Data = {0};

      const int handle = ::FileOpen("Casting.tmp", FILE_READ | FILE_WRITE | FILE_BIN);

      if (handle != INVALID_HANDLE)
      {
        ::FileWriteStruct(handle, Value);

        ::FileSeek(handle, 0, SEEK_SET);
        ::FileReadStruct(handle, Data);

        ::FileClose(handle);
      }

      return(Data);
  #else // TYPETOBYTES_FULL_SLOW
      union CAST

Coulage arbitraire par écriture/lecture binaire... Extinction des feux. Ne lisez pas plus loin...

Raison: