Características da linguagem mql5, subtilezas e técnicas - página 38

 
fxsaber:

Funções do rudimento (não necessário)

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


Porquê?
 
Konstantin:
Porquê?
Tudo é feito através dos operadores adequados.
 
fxsaber:
Tudo é feito através dos operadores adequados.

Não percebo bem, dá-me um exemplo...
 
Konstantin:

Não percebo bem, dá-me um exemplo...

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Peculiaridades da linguagem mql5, sutilezas e truques

fxsaber, 2017.04.26 15:16

Todos os tipos padrão são combinados uns com os outros
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Resultado

1
1.23

 
fxsaber:



ah, aí está ))) deixa-os ter agora que os têm )) caso contrário o código deixará subitamente de funcionar como funcionava com as estruturas, pelo menos a união foi introduzida e, de certa forma, podemos passar com uma muleta ))
 
fxsaber:

Funções úteis (não necessárias)

  • GetPointer

E esta função é duplicada por quê?
 
Vasiliy Pushkaryov:
E esta função é duplicada por quê?
& Objeto
 

Usando união em vez de estruturas de fundição

Desde a construção do 1596 é proibida a conversão explícita de estruturas de diferentes tipos umas para as outras. Um exemplo que funciona em construções antigas não será compilado agora:

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

No entanto, agora é possível combinar dados em uma estrutura sindical em MQL. Por causa disso, é possível realizar uma conversão de tipo usando um sindicato:

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 estrutura já está disponível nas novas construções.

p.s. Solicite aos desenvolvedores que comecem a consertar a documentação na fundição:https://www.mql5.com/ru/docs/basis/types/casting

 
Vasiliy Sokolov:

Usando união em vez de estruturas de fundição

Fórum sobre negociação, sistemas de negociação automatizados e testes estratégicos

Bibliotecas: TypeToBytes

fxsaber, 2017.04.26 10:49

Fundição de estrutura aleatória disponível
struct STRUCT2
{
  MqlTick Tick;
};

// Кастинг произвольных простых структур
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Аналог классического кастинга STRUCT2 Struct2 = (STRUCT2)Tick;
união não permite fundição de estruturas com construtor personalizado e/ou operador de cópia.
 
fxsaber:
união não permite fundição para estruturas com construtor personalizado e/ou operador de cópia.

Não houve menção de substituir completamente a fundição por um sindicato.

p.s. Eu olhei para o teu 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

Fundição arbitrária através de escrita/leitura binária... Luzes apagadas. Não leia mais nada...

Razão: