Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 38

 
fxsaber:

Funzioni di rudimento (non richieste)

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


Perché?
 
Konstantin:
Perché?
Tutto viene fatto attraverso gli operatori appropriati.
 
fxsaber:
Tutto viene fatto attraverso gli operatori appropriati.

Non capisco bene, mi faccia un esempio
 
Konstantin:

Non capisco bene, mi faccia un esempio

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Peculiarità del linguaggio mql5, sottigliezze e trucchi

fxsaber, 2017.04.26 15:16

Tutti i tipi standard sono abbinati tra loro
void OnStart()
{
  string Str = "1.23qwedfg";
  
  Print((int)Str);
  Print((double)Str);
}

Risultato

1
1.23

 
fxsaber:



ah, ecco )) lasciateglieli avere ora che li hanno )) altrimenti il codice smetterà improvvisamente di funzionare come ha fatto con le strutture, almeno l'unione è stata introdotta e in un certo senso possiamo cavarcela con una stampella ))
 
fxsaber:

Funzioni utili (non necessarie)

  • GetPointer

E questa funzione è duplicata da cosa?
 
Vasiliy Pushkaryov:
E questa funzione è duplicata da cosa?
& Oggetto
 

Usare l'unione invece di fondere le strutture

Dalla build 1596 la conversione esplicita di strutture di tipo diverso tra loro è proibita. Un tale esempio che funziona su vecchie build non compilerà ora:

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

Tuttavia, ora è possibile combinare i dati in una struttura di unione in MQL. Per questo motivo, è possibile eseguire una conversione di tipo usando un'unione:

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

Questa struttura è già disponibile nelle nuove costruzioni.

p.s. Per favore chiedete agli sviluppatori di iniziare a sistemare la documentazione nel casting:https://www.mql5.com/ru/docs/basis/types/casting

 
Vasiliy Sokolov:

Usare l'unione invece di fondere le strutture

Forum sul trading, sistemi di trading automatico e test di strategia

Biblioteche: TypeToBytes

fxsaber, 2017.04.26 10:49

Fusione a struttura casuale disponibile
struct STRUCT2
{
  MqlTick Tick;
};

// Кастинг произвольных простых структур
  STRUCT2 Struct2 = _C(STRUCT2, Tick);   // Аналог классического кастинга STRUCT2 Struct2 = (STRUCT2)Tick;
union non permette il casting per strutture con costruttore personalizzato e/o operatore di copia.
 
fxsaber:
Union non permette il casting per strutture con costruttore personalizzato e/o operatore di copia.

Non si è parlato di sostituire completamente la fusione con un sindacato.

p.s. Ho guardato il tuo codice:

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

Casting arbitrario tramite scrittura/lettura binaria... Luci spente. Non leggere oltre...

Motivazione: