
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Sono solo curioso di sapere perché avete bisogno dell'operatore "&" nellafunzione Compare() per ottenere il valore di "this".
Perché il metodo Compare() è "const", e non è possibile chiamare metodi non "const" al suo interno.
In questo esempio, vedi codice a pagina 2, il metodo getPrice() non è const e al suo interno la funzione CopyClose() non è anch'essa const. Tutti i metodi possono essere convertiti in "const", ma CopyClose() no.
Comunque, l'operatore "&" dà accesso ai metodi non const, quindi, possiamo chiamarli dentro unmetodo "const".
Perché il metodo Compare() è "const", e non è possibile chiamare metodi non "const" al suo interno.
In questo esempio, vedi codice a pagina 2, il metodo getPrice() non è const e al suo interno la funzione CopyClose() non è anch'essa const. Tutti i metodi possono essere chiamati "const", ma CopyClose() no.
Comunque, l'operatore "&" dà accesso ai metodi non const, quindi, possiamo chiamarli dentro unmetodo "const".
Ora capisco. Non ho idea se sia una costruzione valida, probabilmente lo sapete. Per me è meglio evitare completamente le dichiarazioni di metodo 'const' in MQL, come in Java.
Ora capisco. Non ho idea se sia una costruzione valida, probabilmente lo sapete. Per me è meglio evitare completamente le dichiarazioni di metodi 'const' in MQL, come in Java.
Per utilizzare i metodi (molto utili) delle classi di raccolta della libreria std (cioè ricerca, ordinamento, ecc.) dovete sovrascrivere il metodo Compare di CObject. Questo significa che tutti i metodi chiamati dall'interno del metodo Compare devono anche essere metodi const. OP non ha aggirato questo dettaglio, OP semplicemente non ha usato correttamente il puntatore'this'. Così invece di chiamare semplicemente this.DoSomething(), OP ha creato il suo proprio puntatore a (self)object. es. otherSelfPointer.DoSomething()
Per utilizzare i metodi (molto utili) delle classi di raccolta della libreria std (es. search, sort, ecc.) dovete sovrascrivere il metodo Compare di CObject. Questo significa che tutti i metodi chiamati dall'interno del metodo Compare devono anche essere metodi const. OP non ha aggirato questo dettaglio, OP semplicemente non ha usato correttamente il puntatore this. Così invece di chiamare this.DoSomething(), OP ha creato il suo proprio puntatore a (self)object invece di usare semplicemente la parola chiave this. es. otherSelfPointer.DoSomething()
Capisco cosa ha fatto, la domanda è ora, se questa costruzione è innocua (in generale). Il compilatore non si aspetta che l'oggetto modifichi i suoi membri nelle funzioni const.
Capisco cosa ha fatto, la domanda è ora, se questa costruzione è innocua (in generale). Il compilatore non si aspetta che l'oggetto modifichi i suoi membri nelle funzioni const.
In questo caso specifico ottengo solo il valore, non sto cambiando nulla. Ma, se proviamo a cambiare un valore const probabilmente il compilatore avvertirà di questo problema, o, nel peggiore dei casi, otterremo un'eccezione di run time.
Capisco cosa ha fatto, la domanda è ora, se questa costruzione è innocua (in generale). Il compilatore non si aspetta che l'oggetto modifichi i suoi membri nelle funzioni const.
Ohhh.... Vedo ora, il mio errore. Questo potrebbe potenzialmente essere pericoloso. OP dovrebbe assicurarsi che tutti i metodi all'interno del perview di Compare() siano anche metodi const.
Ciao @Alain Verleyen,
Ho cambiato il metodo getPrice(), invece di usare CopyClose() sto usando CopyBuffer(). Questo non cambia l'obiettivo principale.
Quindi, se utilizzo la parola chiave "const" nel metodo getPrice(), ottengo l'errore: "'CopyBuffer' - nessuno degli overloads può essere applicato alla chiamata di funzione". Penso che questo accada perché CopyBuffer non è un metodo const, e non è possibile chiamare un metodo non const all'interno di un metodo const.
Scusa per la risposta tardiva, ma non ho avuto tempo di seguire l'argomento fino ad ora.
Non ho ancora capito perché non puoi dichiarare il tuo getPrice() come const quando usi CopyBuffer(). Non ha senso per me, potresti postare la tua versione aggiornata di getPrice()?
Qualsiasi aggiornamento