Errori, bug, domande - pagina 2472

 

Creo un simbolo personalizzato e lo riempio con 25 anni di barre giornaliere, questo dovrebbe pesare circa 400kb. Tuttavia, nella cartella dei simboli, vengono creati dei file .hcc con una dimensione totale di 15 mb! Per di più tutto questo richiede circa 20 secondi! È fuori questione... Come si spiega questo?

 
Sergey Dzyublik:

Sono stato sorpreso di scoprire che era possibile dichiarare typedef con un puntatore a una funzione template.
Tuttavia, la felicità non durò a lungo.

Che è quello di cui stavo parlando
 

Decine di "caratteristiche" e bug nella MT sono stati segnalati di recente.
Come facciamo a sapere se vale la pena aspettare che vengano riparati o no?
Per favore, non suggerite di testare tutto ogni volta che viene rilasciata una nuova build.

#(non corretto in MT5(build 2057)) "Strategy Tester: 2 passaggi previsti, ma in pratica numero infinito di passaggi > 900pc a causa dell'errore "OnInit critical error"".
(non corretto in MT5(build 2057))"Valore non valido del campo dimensione dell'array all'interno dell'operatore di assegnazione predefinito per strutture con array dinamici".
(non corretto in MT5(build 2057))"Il compilatore non vede il costruttore di copia predefinito per la classe quando restituisce un oggetto di classe per valore da una funzione".
(non corretto in MT5(build 2057))"Compile bug on type cast "in itself" for pattern classes and "complex" structures".
(non corretto in MT5(build 2057))"Quando si lavora con typedef, usare una funzione template con specializzazione esplicita non genera codice per questa funzione template".
(non corretto in MT5(build 2057))"Errore di compilazione quando si riutilizza la stessa firma di funzione all'interno di typedef".
#
(non corretto in MT5(build 2057))"Una parte significativa di funzioni per la gestione delle stringhe non funziona con caratteri NULL in una stringa (per esempio: ShortArrayToString, StringInit, StringFill)".
(non corretto in MT5(build 2057))"La funzione StringSetLength funziona solo per "tagliare" la lunghezza della stringa, non per aumentarla.
(corretto in MT5(build 2057))"Strategy Tester: 750 processi "metatester64.exe"sono in esecuzione".
#
"Forum www.mql5.com, quando si modifica un messaggio con un'immagine, l'immagine precedente non viene sostituita con quella nuova".


Suggerimenti:
"Permettere all'utente di forzare la generazione/cancellazione di codice per l'operatore di assegnazione predefinito (costruttore di copia)".
"Permettere ad ArrayCopy di copiare classi e strutture "complesse", in modo simile a come le strutture forniscono funzionalità di copia profonda per qualsiasi tipo di oggetto".
"Fornire la funzionalità per l'utente di leggere/impostare il valore dellacapacità quando si lavora con gli array dinamici".

"Modifiche per migliorare l'infografica del servizio Segnali"

 
A100:
Ecco di cosa stavo parlando.

Itypedef dei template e l'uso dei typedef in una classe template sono cose diverse.
La seconda opzione funziona, ma c'è un problema di sovrapposizione dello spazio dei nomi quando si riutilizza una classe template con un tipo diverso.

 
Alexey Navoykov:

Creo un simbolo personalizzato e lo riempio con 25 anni di barre giornaliere, questo dovrebbe pesare circa 400kb. Tuttavia, la cartella dei simboli crea file .hcc con una dimensione totale di 15 mb! E per di più il tutto richiede circa 20 secondi! Fuori questione... Come si può spiegare questo?

Date un'occhiata a ciò che è registrato.

 
fxsaber:

Guardate cosa viene registrato.

Beh, non conosco il formato hcc, quindi non posso controllare cosa c'è nel file. Ma nel terminale mostra barre giornaliere. Quando passo a un timeframe più piccolo vedo le stesse barre. A quanto pare, salva anche TUTTI i timeframe nel file inizialmente, quindi... Pensavo che venissero salvate solo le barre dei minuti, dalle quali vengono poi sintetizzati tutti gli altri timeframe. E il numero di barre dei minuti, come già detto, coincide con le barre del giorno, cioè ci sono circa 7000 barre dei minuti in totale.

Pertanto, ho l'idea che salvi 7000*M1, 7000*M2, 7000*M3, ecc. fino a 7000*D1 in un file. Se è così, probabilmente recupererà 15 MB in totale. Correzione: circa 5 secondi(20 - quando si aggiorna la storia esistente).

 

C'è qualcosa di rotto nel sito del forum: non posso vedere i miei ultimi messaggi.
Per esempio,questo e questo mancano da"Tutti i messaggi"
E sembra che la valutazione sia stata superiore a 6000 fino a qualche mese fa. Non so però - forse il rating può diminuire nel tempo a causa di una minore attività.

 
class A{
public:
   struct AA{
      uchar data[8];
   };
   static AA obj;
};

AA A::obj = {0};     // OK


template<typename T>
class B{
public:
   struct BB{
      T data[8];
   };
   static BB obj;
};

template<typename T>
BB B::obj = {0};       //'BB' - declaration without type    




void OnStart(){  
   ArrayPrint(A::obj.data);
   //ArrayPrint(BB<int>::obj.data);
}


Attualmente non è possibile utilizzare una variabile statica dichiarata all'interno di una classe template.
Con l'introduzione di uno spazio dei nomi, questa restrizione può essere aggirata?

 
Sergey Dzyublik:


Attualmente non è possibile utilizzare una variabile statica dichiarata all'interno di una classe template.
Con l'introduzione del namespace, questa restrizione potrebbe essere aggirata?

Non si tratta della variabile. Non può vedere la classe BB. Deve essere presa fuori dalla classe B come template<typename T> classe BB;

 
Alexey Navoykov:

Non si tratta della variabile. Non vede la classe BB, deve essere spostata fuori dalla classe B cometemplate<typename T>classe BB;

Il post era indirizzato agli sviluppatori, che se essi "barare" supporto fuori dalla scatola.

Di nuovo, il problema riguarda il non poter usare una variabile statica dichiarata all'interno di una classe template.
Cosa suggerite di fare in caso di typedef:

 
class A{
public:
   typedef void (*callback_A)();
   static callback_A f_ptr;

};
callback_A A::f_ptr = NULL;                  // Ok


template<typename T>
class B{
public:
   typedef T (*callback_B)();
   static callback_B f_ptr;
};
template<typename T>
callback_B B::f_ptr = NULL;                  //'callback_B' - declaration without type	

void func_A(){PRINT(__FUNCSIG__);}
int func_B(){PRINT(__FUNCSIG__); return 0;}

void OnStart(){  
   A::f_ptr = func_A;
   A::f_ptr();

   //B<int>::f_ptr = func_B;
   //B<int>::f_ptr();
}