Características del lenguaje mql5, sutilezas y técnicas - página 38

 
fxsaber:

Funciones rudimentarias (no necesarias)

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


¿Por qué?
 
Konstantin:
¿Por qué?
Todo se hace a través de los operadores adecuados.
 
fxsaber:
Todo se hace a través de los operadores adecuados.

No entiendo bien, dame un ejemplo
 
Konstantin:

No entiendo bien, dame un ejemplo

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Peculiaridades del lenguaje mql5, sutilezas y trucos

fxsaber, 2017.04.26 15:16

Todos los tipos estándar están adaptados entre sí
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Resultado

1
1.23

 
fxsaber:



ah, ahí tienes )) dejemos que los tengan ahora que los tienen )) de lo contrario el código dejará de funcionar de repente como lo hizo con las estructuras, al menos se introdujo la unión y en cierto sentido podemos salir adelante con una muleta ))
 
fxsaber:

Funciones prácticas (no necesarias)

  • GetPointer

¿Y esta función está duplicada por qué?
 
Vasiliy Pushkaryov:
¿Y esta función está duplicada por qué?
& Objeto
 

Uso de la unión en lugar de las estructuras de fundición

Desde la versión 1596 se prohíbe la conversión explícita de estructuras de diferentes tipos entre sí. Un ejemplo de este tipo, que funciona en compilaciones antiguas, no compilará ahora:

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

Sin embargo, ahora es posible combinar datos en una estructura de unión en MQL. Por ello, es posible realizar una conversión de tipo utilizando una unión:

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

Esta estructura ya está disponible en las nuevas construcciones.

p.d. Por favor, pida a los desarrolladores que empiecen a arreglar la documentación en casting:https://www.mql5.com/ru/docs/basis/types/casting

 
Vasiliy Sokolov:

Utilizar la unión en lugar de las estructuras de fundición

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bibliotecas: TypeToBytes

fxsaber, 2017.04.26 10:49

Estructura aleatoria de fundición disponible
struct STRUCT2
{
  MqlTick Tick;
};

// Кастинг произвольных простых структур
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Аналог классического кастинга STRUCT2 Struct2 = (STRUCT2)Tick;
union no permite el casting para estructuras con constructor personalizado y/o operador de copia.
 
fxsaber:
union no permite el casting para estructuras con constructor personalizado y/o operador de copia.

No se mencionó la sustitución completa del reparto por un sindicato.

p.d. He mirado su código:

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

El reparto arbitrario a través de la escritura/lectura binaria... Se apagan las luces. No sigas leyendo...