Errori, bug, domande - pagina 2670

 

Errore del tester (o forse non lo capisco più)

Profit trade mancante nel tester

 

Un altro incontro con il bug precedentemente descritto- "Undefined Behavior, si crea un oggetto complesso avvolto con tipo interno "C" diverse volte, ma si scopre che è un tipo di dati completamente diverso, forse "B", forse "int", qualsiasi cosa si voglia...".
Infatti ci è voluto un giorno per localizzare, riprodurre e trovare soluzioni, purtroppo tutto senza risultato...
Ilworkaround precedentemente suggerito usando un parametro template fittizio, per l'esempio qui sotto si è rivelato inutile.

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
};

template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};

template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // int
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // Compiler Error: '=' - illegal operation use
   };
};


template<typename T>
class GetStructType{
public:
   struct type : public T{};
};

template<typename _It>
void test(_It &it){
   GetStructType<_It>::type::Opt::test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}

L'unica soluzione praticabile che sono riuscito ad ottenere usando il tipo automatico "fatto in casa", ma ho ottenuto enormi costi di compilazione con zero profitto nella velocità del codice reale...
Per favore aiutatemi, forse qualcuno ha un'idea su come aggirare il problema.

 
Alexey Klenov:

Errore del tester (o forse non lo capisco più)

Il visualizzatore, per ragioni architettoniche, non mostra sempre lo stato attuale.

 
fxsaber:

Il visualizzatore, per ragioni architettoniche, non mostra sempre la condizione reale.

Grazie, lo terrò presente.
 

Difetti nella funzione template/cache delle classi:
(non risolto da MT5(build 2361)) *** (up) Undefined Behavior, si crea un oggetto complesso avvolto con tipo interno "C" più volte e si scopre che è un tipo di dati molto diverso, forse "B", forse "int", quello che vuoi...
(non risolto da MT5 (build 2361)) * Errore di compilazione, bug sul passaggio di un puntatore di funzione come argomento const ref template.
(non risolto da MT5 (build 2361)) * Errore di compilazione, l'oggetto B<int> può essere creato dopo l'oggetto di classe B<void*>, ma si verifica un errore di compilazione se fatto prima.


Difetti nella funzione template/classe di lavoro:
(non risolto da MT5(build 2361)) *** (su) Errore di compilazione, bug all'interno della funzione template, il puntatore passato all'interno dell'operazione diconversione esplicita del tipo si comporta come una classe altrimenti.
(non risolto da MT5 (build 2361)) ** Errore di compilazione, bug con la generazione di codice di classe template quando si usa una classe interna.
(non corretto in MT5 (build 2361)) ** Errore di compilazione, bug sul tentativo di accedere alla classe interna per il parametro template della funzione template.
(non risolto da MT5 (build 2361)) ** Errore di compilazione, bug sulla generazione di metodi/classi di template, il processo di "auto-sostituzione" del parametro di template va fuori dallo scopo nel codice principale del programma.
(non risolto da MT5 (build 2361)) * Errore di compilazione, bug con generazione di codice di classe template mancante quando la classe template agisce come valore di ritorno per il metodo template.
(non risolto da MT5 (build 2361)) * Errore di compilazione, bug quando la struct interna viene passata alla funzione template, iltipo di dati risultante non può essere usato come tipo di dati base per un'altra struct interna nella classe template.
(non risolto da MT5 (build 2361)) * Errore di compilazione, bug sulla chiamata di una funzione template con tipi di argomenti espliciti quando viene chiamata da una funzione non template sovraccaricata.

(non risolto da MT5(build 2361)) Errore di compilazione, bug sulla definizione interna della classe - nessun riferimento allo spazio dei nomi globale quando si specifica una classe base.
(non risolto
da MT5 (build 2361)) *** (nuovo) Errore di compilazione, l'affermazione principale dell'avviso di output inappropriato - "comportamento deprecato, la chiamata di metodo nascosta sarà disabilitata in una futura versione del compilatore MQL".L'implementazione attuale sta sparando un cannone su un passero.
(
non risolto da MT5 (build 2361)) ** (nuovo) Errore di compilazione, il bug riguarda il valore di ritorno di una funzione template quando il valore di ritorno è una classe interna ad una classe template il cui tipo di parametro è definito dal tipo di argomento della funzione template.
(
non risolto da MT5 (build 2361)) * (nuovo)Errore di compilazione, nessun controllo per i nomi dei tipi di template riutilizzati viene eseguito quando si dichiara una funzione template all'interno di una classe template, il che porta a un comportamento inaspettato.
(
non risolto da MT5 (build 2361)) * (nuovo) Errore Runtimer, nel costruttore della classe base è impossibile eseguire un typecast esplicito sul puntatore casting all'oggetto della classe base al puntatore alla classe madre.
(
non risolto da MT5(build 2361)) (nuovo) Errore di compilazione, difetti multipli relativi al ritorno dell'oggetto "in luogo creato" quando la classe/struttura template è l'oggetto.


Difetti relativi alla mancata corrispondenza della priorità delle chiamate per le funzioni sovraccaricate in MQL rispetto al C++:
(non risolto da MT5 (build 2361)) *** Quando c'è un'ereditarietà di classi A <= B <= C <= D e sono implementate due funzioni di sovraccarico, per esempio, una con parametro A* e la seconda con parametro B*, allora passare in tale funzione un oggetto C* o D* in MQL causa un errore di compilazione "ambiguous call to overloaded function".
(non risolto da MT5 (build 2361)) ** Runtime, mismatch di priorità per le chiamate di funzioni template sovraccaricate.
(non corretto da MT5(build 2361)) ** Errore di compilazione, la priorità delle chiamate di funzioni template sovraccaricate dipende effettivamente dal tipo di parametro template, che in teoria non dovrebbe influenzare il risultato della compilazione.
(non risolto da MT5 (build 2361)) ** L'errore di compilazione si verifica alla generazione del codice della funzione template nonostante il fatto che ci sia una funzione template sovraccaricata con la firma adatta per i parametri passati.


Difetti relativi alla lentezza di esecuzione delle funzioni, lavoro dell'ottimizzatore di codice:
(non risolto da MT5 (build 2361)) ** (nuovo) Runtime, grande overhead quando si aggiunge un elemento alla volta in un array usando ArrayResize, nonostante il fatto che la memoria per loro sia stata riservata in anticipo, per esempio, le strutture sono fino a 7 volte più lente.


Suggerimenti:
link- su come permettere ai letterali e alle variabili temporanee di essere passati come argomenti di funzioni const ref.
link- quandosi spostano i file del progetto nella scheda "Progetto", per i file spostati che sono aperti e sono nelle schede ME, per aggiornare automaticamente il loro percorso di localizzazione.
link- per introdurre la funzionalità della dichiarazione typedef in MQL.
link- circa la possibilità di forzare la generazione di costruttori di copia e operatori di assegnazione predefiniti.

 
fxsaber:

Il visualizzatore non mostra sempre lo stato attuale per ragioni architettoniche.

Alexey Klenov:
Grazie, lo terrò presente.

Curato eseguendo alcuni tick (F12) dopo la pausa.

 
Andrey Khatimlianskii:

Curato eseguendo alcuni tick (F12) dopo la pausa.

Grazie. Farò un tentativo.

 
Sergey Dzyublik:

Un altro incontro con il bug precedentemente descritto- "Undefined Behavior, si crea un oggetto complesso avvolto con tipo interno "C" diverse volte, ma si scopre che è un tipo di dati completamente diverso, forse "B", forse "int", qualsiasi cosa si voglia...".
Infatti ci è voluto un giorno per localizzare, riprodurre e trovare soluzioni, purtroppo tutto senza risultato...

Alla fine sono riuscito a trovare una soluzione accettabile.
Si scopre che l'uso di un membro statico della classe fornisce un modo per aggirare il bug descritto sopra:

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
   
   static Opt opt;
};

template<typename _Tp, typename _Opt>
static It_g::Opt It_g::opt;


template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};


template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // ClassA*
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // OK
   };
};


template<typename _It>
void test(_It &it){
   it.opt.test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}
 

Come posso risolvere questo errore di memorizzazione?


Gradualmente si rifiuta di salvare sempre più file. Presto tutto ciò che viene memorizzato sarà impossibile da aggiornare.

 

I profitti/perdite nel tooltip per gli ordini buy stop limit e per gli ordini sell stop limit sono calcolati in modo errato.

Quando si passa il mouse sopra tp

quando si passa il mouse sopra la sl