OOP, modelli e macro in mql5, sottigliezze e usi - pagina 3

 
Алексей Тарабанов:

Avete trovato un modo per crearlo.

Siete confusi su qualcosa.
 
Ilya Malev:

State cercando di utilizzare un campo staticodi una classe in fase di inizializzazione prima che sia stata creata almeno 1 istanza di quella classe. Secondo me, questa è una perversione... Questo è il modo in cui funziona normalmente:

Il principio di incapsulamento implica generalmente che tali campi dovrebbero essere nascosti, non pubblici.

Un campo statico è un campo statico per questo motivo, quindi non dipende dall'avere istanze della classe. Ma se vuoi creare prima un'istanza della classe - ok, creala, ma solo all'interno della funzione. E richiedi questo campo da essa (direttamente o attraverso un metodo) - il risultato è di nuovo lo stesso.

 
Alexey Navoykov:
Siete confusi su qualcosa.

No, non sono confuso su nulla.

Prima le variabili di livello globale, poi le variabili statiche e poi le variabili locali come appaiono nel codice.

Questo particolare esempio viola la raccomandazione della documentazione di noninizializzare le variabili con le funzioni. È stato più facile per gli sviluppatori scrivere un tale avvertimento che spiegare dove devono e non devono.

Rimuovi l'elettricità statica dal tuo campione e ottieni il risultato che vuoi.

 
Алексей Тарабанов:

No, non sono confuso su nulla.

Prima le variabili di livello globale, poi le variabili statiche e poi le variabili locali come appaiono nel codice.

Questo particolare esempio viola la raccomandazione della documentazione di noninizializzare le variabili con le funzioni. È stato più facile per gli sviluppatori scrivere un tale avvertimento che spiegare dove devono e non devono.

Rimuovi la statica dal tuo esempio e ottieni il risultato desiderato.

"Raccomandazione della documentazione" )) Sono stupito di te. Non hai ancora capito, vero? C'è un bug nella lingua. Gli stessi sviluppatori ne parlano, e vi spiegano come tamburellare correttamente per non incorrere in questo bug. Ho fatto in modo di dimenticare questo bug una volta per tutte.
 
Alexey Navoykov:

Se è una costante (e la visibilità globale dichiara per lo più costanti, se il codice è intelligente), non c'è altra scelta.

Riguardo a tutto ciò che è in giallo, ho una domanda: PERCHE'? Ho già capito come risolvere il problema.

QUI per non fare un pasticcio con quello che hai già fatto.

 
Alexey Navoykov:
"Raccomandazione di documentazione" )) Sono stupito di te. Davvero non hai ancora afferrato il punto? C'è un bug nel linguaggio. Gli stessi sviluppatori ne parlano, e vi spiegano come tamburellare correttamente per non incorrere in questo bug. Ho fatto in modo di dimenticare questo bug una volta per tutte.

Non si può iniziare il valore di qualcosa con una funzione. Anche se lo vuoi davvero. Non lo capite?

 
Alexey Navoykov:

Un campo statico è un campo statico, quindi non dipende dalle istanze della classe. Ma se volete creare prima un'istanza della classe, OK, createla, ma solo all'interno della funzione. E richiedete questo campo da essa (direttamente o tramite metodo) - il risultato sarà di nuovo lo stesso.

Allora, si tratta di programmazione procedurale o orientata agli oggetti? Perché dovremmo eseguire funzioni non legate a classi nella fase precedente all'inizializzazione con riferimento a oggetti tipizzati, inoltre. Capisco che la risposta è "perché ne ho voglia". Ma se fossi lo sviluppatore, non mi affretterei a cancellare tutto e correre a sistemare questo particolare comportamento, perché è un'architettura piuttosto marginale e inoltre il problema si risolve facilmente creando un'istanza della classe. Non all'interno della funzione, ovviamente.

 
Alexey Viktorov:

PER SEMPRE, per non fare un casino del casino che hai già fatto.

Io l'ho già fatto e non me ne pento neanche un po'. Tu, invece, sembri provare un grande piacere nel costringerti con le restrizioni artificiali imposte da MQ. Forse sei un masochista? ) Eppure tu cerchi così insistentemente di convincermi che questo è il modo di fare. Non è necessario, è forzato.
 
Алексей Тарабанов:

Non si può iniziare il valore di qualcosa con una funzione. Anche se lo vuoi davvero. Non lo capite?

Sì, non capisco, spiega.
 
Ilya Malev:

Quindi è una programmazione procedurale o orientata agli oggetti? Perché, all'improvviso, eseguire funzioni non legate alle classi prima dell'inizializzazione rispetto agli oggetti tipizzati. Capisco che la risposta è "perché ne ho voglia". Ma se fossi lo sviluppatore, non mi affretterei a cancellare tutto e correre a sistemare questo particolare comportamento, perché è un'architettura piuttosto marginale e inoltre il problema si risolve facilmente creando un'istanza della classe. Non all'interno di una funzione, ovviamente.

Quindi lei è un sostenitore dell'uso di massa delle variabili globali, se ho capito bene. Allora è improbabile che io e lei ci capiamo.

Inoltre, la funzione stessa può essere un modello. E l'istanza creata, rispettivamente, dovrebbe essere parametrizzata dallo stesso tipo:

template<typename T>
int f()
{  
  A<T> a;
  return a.f();
}

Che cosa fai?

Motivazione: