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

 
TheXpert:

cast dinamico per il confronto? Sei fuori di testa?

Non mi interessa il tempo di esecuzione in questo caso, il tipo può essere definito anche in altri modi, per esempio da una funzione virtuale di override. Il codice è stato scritto sul momento in 10 minuti per mostrare il principio e non è una variante funzionante

 
Ilya Malev:

Qual è lo scopo di CBase? E perché si dovrebbero confrontare 2 valori dello stesso tipo?

Sì, non hai affatto bisogno di CBase qui. Hai IComparer per qualche ragione ereditato da Number, anche se sono entità assolutamente diverse. Comparer non è un'interfaccia per Number, è un oggetto indipendente che accetta due numeri. Quindi il tuo Comparer dovrebbe essere solo IComparer<T1,T2> e senza alcun Number e CBase
 
Giusto, un altro cacasotto con un ego.
 
L'autostima è solo quando qualcuno sale su un ramo e comincia a lanciare la cacca. Cacca molto importante. Ho semplicemente scritto al compagno (non tu) con cui stavamo discutendo l'argomento dei template, come vedo una tale implementazione.
 
Ilya Malev:

Quindi avete un errore semantico: le nozioni Comparer e Comparable sono confuse insieme. La prima è un comparatore (una classe indipendente), mentre la seconda è un'interfaccia per l'oggetto che viene comparato (cioè lo confronta con un altro oggetto). Questo oggetto può ereditare

 
Alexey Navoykov:

Quindi hai un errore semantico. Le nozioni Comparer e Comparable sono confuse. La prima è un Comparer (una classe indipendente) e la seconda è un'interfaccia all'oggetto che si confronta (cioè lo confronta con un altro oggetto).

Il mio Numero è solo il tipo Comparabile, e l'interfaccia è il tipo Comparatore, e sono in qualche modo abilmente collegati anche in Sharp. In questo caso lavorano l'uno attraverso l'altro. Vi dico che non era il mio scopo copiare esattamente quella struttura lì. L'obiettivo qui è mostrare come si può fare un'interfaccia basata su template che è necessariamente ereditata da una delle classi che si stanno confrontando. Questo è il meccanismo che ho visto con te e mi è piaciuto.

 
Alexey Navoykov:
Avete IComparer per qualche motivo ereditato da Number, anche se sono entità assolutamente diverse.

Ho numerato qui il tipo di oggetto della classe base, beh, molto approssimativamente, non mi sono posto l'obiettivo di presentare un'architettura funzionante in 100 righe. Ma tutto erediterà comunque da un antenato comune

 
Ilya Malev:

Qui lavorano l'uno attraverso l'altro.

Ma non lo fa. Non puoi ereditare entità diverse l'una dall'altra. Number può ereditare l'interfaccia IComparable, e può anche restituire IComparer per il suo tipo in un metodo separato.
 
Alexey Navoykov:
Number può ereditare l'interfaccia IComparable e può anche restituire IComparer per il suo tipo tramite un metodo separato.

Number non è realmente un numero, non ha nemmeno un campo di valore se ci fate caso. L'ho appena chiamato così... Ok, se qualcosa che funziona per me funzionerà allora mi offrirò di discuterne, ma nel frattempo se il mio esempio non si adatta affatto basta non disturbare.

 
Ilya Malev:

Number non è realmente un numero, non ha nemmeno un campo di valore se ci fate caso. L'ho appena chiamato così... Ok, se finisco con qualcosa di fattibile allora mi offrirò di discuterne, ma nel frattempo se il mio esempio non funziona affatto lasciatelo fuori dalla vostra testa

Ok, ma dovresti pensare ai metodi astratti, senza i quali sembra molto inaffidabile.