Domande su OOP in MQL5 - pagina 89

 
Se la struttura ha un solo campo, va bene. Se c'è dell'altro, è inutile e persino stupido.
 
Dmitry Fedoseev:
Se la struttura ha un solo campo, va bene. Se c'è di più, è senza senso e anche stupido.

Chi vorrebbe una struttura a campo unico? Come aiuta questa "struttura"?

 
Mikhail Dovbakh:

Chi vorrebbe una struttura a campo unico? Come aiuta questa "strutturazione"?

struttura wrapper su un array

MQL non può gestire i puntatori, ma può gestire strutture senza vincoli, quindi dovete avvolgere un array in una struttura

 
Igor Makanu:

struttura wrapper su un array

MQL non può gestire i puntatori, ma può gestire le strutture senza alcuna limitazione, quindi dobbiamo avvolgere un array in una struttura

Non sarebbe più facile avvolgerlo in una classe? Tuttavia, la struttura è, prima di tutto, un vantaggio quando si lavora con una lista di dati statici. Inoltre, quando si lavora con una struttura dinamica, non è conveniente atterrare dopo.

 
Alexandr Andreev:

Non sarebbe più facile impacchettare il tutto in una classe? Una struttura è principalmente un vantaggio quando si lavora con una lista statica di dati. E quando si lavora con una struttura dinamica, non è conveniente atterrare.

è più semplice a

E per evitare la moltiplicazione dei tipi, ho fatto una classe che descrive la sezione pubblica della struttura, usando questi tipi parzialmente fuori dalla classe,

usarli come strutture normali, l'unica cosa è più due punti, ma non dirò che mi dà fastidio

 
Mikhail Dovbakh:

Chi vorrebbe una struttura a campo unico? Come aiuta questa "struttura"?

Quello era un... come si chiama... tesi retorica))

Tuttavia, a volte può essere utile mettere un array in una struttura e poi usare un array da queste strutture.

 
Funziona bene. C'è solo una cosa. Quando la struttura viene restituita dalla funzione, non è la struttura creata all'interno della funzione che viene restituita, ma una copia di questa struttura, cioè viene avviato un costruttore di copie implicito.
 
Vladimir Simakov:
Funziona bene. C'è solo una cosa. Quando la struttura viene restituita dalla funzione, non è la struttura creata all'interno della funzione, ma una copia di questa struttura, cioè viene lanciato il costruttore implicito di copia.
Non c'è nessuna copia inutile, la struttura viene creata nello stack e il campo richiesto viene copiato da essa.
 
Aliaksandr Hryshyn:
Non c'è nessuna copia inutile, la struttura viene creata nello stack e il campo richiesto viene copiato da essa.
Questo se il compilatore lo ottimizza. Ma altrimenti, quando si chiama f(), accadrà la seguente cosa. Il puntatore in cima allo stack viene spostato della dimensione della struttura (il risultato verrà restituito qui). Il codice della funzione sale sullo stack. Inoltre, nel processo di esecuzione si arriva alla dichiarazione della struttura. Il puntatore dello stack si sposta di nuovo alla sua dimensione. È questa struttura che viene riempita con la funzione. Prima che la funzione esca, la memoria allocata per la struttura nella funzione viene copiata nella memoria allocata per il ritorno.
 
Vladimir Simakov:
Questo è se il compilatore cooptima. Altrimenti, quando viene chiamata f(), accadrà quanto segue. Il puntatore del nodo dello stack viene spostato alla dimensione della struttura (è qui che verrà restituito il risultato). Il codice della funzione sale sullo stack. Inoltre, nel processo di esecuzione si arriva alla dichiarazione della struttura. Il puntatore dello stack si sposta di nuovo alla sua dimensione. È questa struttura che viene riempita con la funzione. Prima che la funzione esca, la memoria allocata per la struttura nella funzione viene copiata nella memoria allocata per il ritorno.
Molto probabilmente, lo ottimizza.