A100: Se la differenza è enorme, allora perché entrambe le varianti compilano normalmente in C++?
Qui non c'è alcuna autorità su C++ in questo caso, poiché ho basato le mie conclusioni sulla logica. Sopra, ho rielaborato l'esempio con una dereferenza.
Tutto quello che dovete fare è fare una tale sostituzione
// typedef void (*fn)();typedefvoid (*fn123)();
Come il dereferenziamento sarà completamente diverso. Si può chiedere al compilatore di essere "più intelligente di un pazzo" e agire come fa in C++. Ma questa soluzione è davvero discutibile.
Cioè tale "aiuto" può essere implementato nel compilatore, ma viene mostrata la differenza di approccio.
Nel typedef originale è un alias per un tipo, non un altro tipo, quindi è davvero una grande domanda per gli sviluppatori perché il nome del tipo mostra un alias invece di un tipo.
Комбинатор: Nel typedef originale è un alias per un tipo, non un altro tipo, quindi è davvero una grande domanda per gli sviluppatori perché il nome del tipo mostra un alias invece di un tipo.
Durante una singola esecuzione e visualizzazione i registri sono pieni di migliaia di voci di questo tipo
2017.08.1620:26:06.4772017.08.0110:04:06 order modified [#253 buy limit 1.00 EURUSD at 1.18159]
2017.08.1620:26:06.4772017.08.0110:04:06 order modified [#253 buy limit 1.00 EURUSD at 1.18159]
2017.08.1620:26:06.4772017.08.0110:04:06 order modified [#253 buy limit 1.00 EURUSD at 1.18159]
2017.08.1620:26:06.4772017.08.0110:04:06 order modified [#253 buy limit 1.00 EURUSD at 1.18159]
2017.08.1620:26:06.4772017.08.0110:04:06 order modified [#253 buy limit 1.00 EURUSD at 1.18159]
2017.08.1620:26:06.4772017.08.0110:04:06 take profit triggered #251 sell 1.00 EURUSD 1.18166 tp: 1.18159 [#254 buy 1.00 EURUSD at 1.18159]
2017.08.1620:26:06.4772017.08.0110:04:06 deal #251 buy 1.00 EURUSD at 1.18159 done (based on order #254)
2017.08.1620:26:06.4772017.08.0110:04:06 deal performed [#251 buy 1.00 EURUSD at 1.18159]
2017.08.1620:26:06.4772017.08.0110:04:06 order performed buy 1.00 at 1.18159 [#254 buy 1.00 EURUSD at 1.18159]
2017.08.1620:26:06.4772017.08.0110:04:06 order [#253 buy limit 1.00 EURUSD at 1.18159] triggered
E bisogna aspettare lunghi secondi perché si presentino. E mi interessa solo il registro, che faccio io stesso in OnDeinit. Perché devo forzare ogni volta questi registri, che vengono letti in casi MOLTO rari? C'è una voce di menu speciale in Agent Log Viewer. E l'assenza di questi registri durante l'ottimizzazione non fa sentire nessuno incompleto. Allora perché tutta questa invadenza in centinaia di megabyte (specialmente se qualche cattivo EA sta cercando di aprire un affare ad ogni tick, ottenendo la modalità Unsupported filled)?
È possibile separare le mosche dalle cotolette nel tester? Lo stesso che nel terminale: un log per le stampe dall'EA stesso e un log del terminale. Stanco di aspettare per lunghi secondi mentre quelle decine di migliaia di messaggi inutili nel registro per ogni punto d'ordine per passare e si può vedere le ultime righe di completamento backtest.
È stato un lungo periodo di tempo. Potrei non essere l'unico infastidito.
Se la differenza è enorme, allora perché entrambe le varianti compilano normalmente in C++?
Qui non c'è alcuna autorità su C++ in questo caso, poiché ho basato le mie conclusioni sulla logica. Sopra, ho rielaborato l'esempio con una dereferenza.
Tutto quello che dovete fare è fare una tale sostituzione
Come il dereferenziamento sarà completamente diverso. Si può chiedere al compilatore di essere "più intelligente di un pazzo" e agire come fa in C++. Ma questa soluzione è davvero discutibile.
Cioè tale "aiuto" può essere implementato nel compilatore, ma viene mostrata la differenza di approccio.
va bene. Che differenza fa?
apparentemente, f non è visto come un puntatore a una funzione in un semplice passaggio al compilatore.
apparentemente, quando viene passato al compilatore, f non viene preso come puntatore a una funzione.
apparentemente, quando viene passato al compilatore, f non viene preso come puntatore a una funzione.
E non dovrebbe, almeno per l'ambiguità.
E non dovrebbe, se non altro per l'ambiguità
E non dovrebbe, se non altro per l'ambiguità
Errore durante la compilazione
Se (1) è OK, perché un errore in (2) se (3) è OK?Nel typedef originale è un alias per un tipo, non un altro tipo, quindi è davvero una grande domanda per gli sviluppatori perché il nome del tipo mostra un alias invece di un tipo.
Sono d'accordo.
A100:
Si prega di spiegare il typeof. Non sono riuscito a trovare una buona spiegazione per i programmatori inesperti.
E bisogna aspettare lunghi secondi perché si presentino. E mi interessa solo il registro, che faccio io stesso in OnDeinit. Perché devo forzare ogni volta questi registri, che vengono letti in casi MOLTO rari? C'è una voce di menu speciale in Agent Log Viewer. E l'assenza di questi registri durante l'ottimizzazione non fa sentire nessuno incompleto. Allora perché tutta questa invadenza in centinaia di megabyte (specialmente se qualche cattivo EA sta cercando di aprire un affare ad ogni tick, ottenendo la modalità Unsupported filled)?
È possibile separare le mosche dalle cotolette nel tester? Lo stesso che nel terminale: un log per le stampe dall'EA stesso e un log del terminale. Stanco di aspettare per lunghi secondi mentre quelle decine di migliaia di messaggi inutili nel registro per ogni punto d'ordine per passare e si può vedere le ultime righe di completamento backtest.
È stato un lungo periodo di tempo. Potrei non essere l'unico infastidito.