В этой статье автор рассматривает различные способы реализации свойств в стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++, тогда как другие годятся для применения в любой программе, написанной на языке C++.
Alexey Volchanskiy: Alexey, sono d'accordo, ma dovremmo fare una votazione, non qui. Ci sono alcune stampelle qui, non ho provato in MQL http://rsdn.ru/article/vcpp/props.xml
C'è qualcosa di sbagliato nella codifica del tuo link, mostra sempre il testo rosso. Ma so cosa intendi, ho letto di queste stampelle prima. Non è possibile implementarlo in MQL al momento, perché l'overloading dell'operatore fantasma non è supportato.Ma questa caratteristica nativa in VS è molto utile, specialmente quando è racchiusa in una macro, e non consuma alcuna risorsa aggiuntiva. Quindi, è giunto il momento di implementare le proprietà anche in MQL, perché tutto sembra goffo senza di esse.
L'ho capito, ho trovato un bug nel compilatore MQL4. Sono stato disattento e mi ci sono voluti 2 giorni per trovarlo. L'essenza del problema è questa: sto per citare un semplice codice. Non ottengo un errore di compilazione o di warping, ma un errore di runtime.
double ptest = double(test); // тут должна быть ошибка компиляции!!!
Per favore, ricordatemi come ordinare i simboli nella finestra di panoramica del mercato (MT4, MT5). Su un terminale sono ben ordinati, sull'altro sono un casino. L'ho risolto molto tempo fa - non ricordo come ho fatto. Non c'è niente nella documentazione al riguardo, tranne che per trascinare i simboli uno per uno in un nuovo posto. Ma non l'ho fatto esattamente - è possibile ordinare l'intera lista manualmente. :-/
Vasiliy Sokolov: Non si può lanciare una classe a un tipo significativo, anche esplicitamente. È sicuramente un errore.
Non è una classe, è un puntatore, e un puntatore è un numero.
class A{};
void f()
{
A *a;
int i = int(a);
}
C++ si compila senza errori
Se disabilitate la conversione diretta esplicita in doppio, la prossima volta avrà int invece di double con lo stesso risultato e il compilatore sarà di nuovo colpevole. Dovete distinguere i vostri errori da quelli del compilatore.
Non è una classe, è un puntatore, e un puntatore è un numero - impara la matematica.
C++ si compila senza errori
Se disabilitate la conversione diretta esplicita in doppio, la prossima volta avrà int invece di double con lo stesso risultato e il compilatore sarà di nuovo colpevole. Dovreste distinguere i vostri errori da quelli del compilatore.
Non c'è nessun puntatore lì, perché i puntatori non esistono in MQL4/5. Ci sono delle maniglie.
Non c'è nessun puntatore lì, perché non ci sono puntatori in MQL4/5. Ci sono descrittori.
Un descrittore è ancora un numero specifico. Il fatto che questo numero non punti a una posizione di memoria specifica non lo priva delle proprietà di un numero.
Naturalmente, in termini di "come viene immagazzinato nella memoria", hai ragione. Ma non ha senso convertire un descrittore in un numero o viceversa, ed è molto probabilmente un bug nel codice. Nel prossimo futuro, se una dichiarazione di conversione appropriata è sovraccaricata nella classe, sarà chiamata.
Signori, che ne direste di migliorare significativamente l'usabilità del linguaggio aggiungendo laproprietà: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx
Il continuo ballare con setter, getter e parentesi è molto fastidioso.
Signori, che ne direste di migliorare significativamente l'usabilità del linguaggio aggiungendo laproprietà: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx
Il continuo ballare con setter, getter e parentesi è molto fastidioso.
Alexey, sono d'accordo, ma dovremmo fare una votazione, non qui. Ci sono alcune stampelle qui, non ho provato in MQL http://rsdn.ru/article/vcpp/props.xml
C'è qualcosa di sbagliato nella codifica del tuo link, mostra sempre il testo rosso. Ma so cosa intendi, ho letto di queste stampelle prima. Non è possibile implementarlo in MQL al momento, perché l'overloading dell'operatore fantasma non è supportato.Ma questa caratteristica nativa in VS è molto utile, specialmente quando è racchiusa in una macro, e non consuma alcuna risorsa aggiuntiva. Quindi, è giunto il momento di implementare le proprietà anche in MQL, perché tutto sembra goffo senza di esse.
L'ho capito, ho trovato un bug nel compilatore MQL4. Sono stato disattento e mi ci sono voluti 2 giorni per trovarlo. L'essenza del problema è questa: sto per citare un semplice codice. Non ottengo un errore di compilazione o di warping, ma un errore di runtime.
Non c'è bisogno di alcun errore qui. Qui c'è una chiara conversione di tipo. Sarebbe così in VS
Che differenza farebbe?Non c'è bisogno di alcun errore qui. Qui c'è una conversione esplicita del tipo.
Non si può lanciare una classe a un tipo significativo, anche esplicitamente. È sicuramente un errore.
Non è una classe, è un puntatore, e un puntatore è un numero.
C++ si compila senza errori
Se disabilitate la conversione diretta esplicita in doppio, la prossima volta avrà int invece di double con lo stesso risultato e il compilatore sarà di nuovo colpevole. Dovete distinguere i vostri errori da quelli del compilatore.
Non è una classe, è un puntatore, e un puntatore è un numero - impara la matematica.
C++ si compila senza errori
Se disabilitate la conversione diretta esplicita in doppio, la prossima volta avrà int invece di double con lo stesso risultato e il compilatore sarà di nuovo colpevole. Dovreste distinguere i vostri errori da quelli del compilatore.
Non c'è nessun puntatore lì, perché i puntatori non esistono in MQL4/5. Ci sono delle maniglie.
----------------------
Ho ricevuto una risposta dal Service Desk
Infatti, ci deve essere un errore di compilazione qui.
Squadra di supporto 2015.08.24 14:39
Non c'è nessun puntatore lì, perché non ci sono puntatori in MQL4/5. Ci sono descrittori.
Un descrittore è ancora un numero specifico
Ma non ha senso convertire un descrittore in un numero o viceversa, ed è molto probabilmente un bug nel codice.
Nel prossimo futuro, se una dichiarazione di conversione appropriata è sovraccaricata nella classe, sarà chiamata.