Domande su OOP in MQL5 - pagina 60

 
Igor Makanu:

ciao di nuovo!


questa domanda, c'è un enum, abbiamo bisogno o di un enum array o un enum lista o un enum contenitore - qualcosa dove memorizzare 7 enum, ma l'appetito cresce, forse 70 enum


dove?

Sia array che lista e contenitore possono essere fatti a seconda del compito. Per come la vedo io, molto probabilmente hai bisogno di semplificare la scrittura del codice, quindi puoi dividere gli enum in gruppi e combinarli in strutture per i parametri di ogni oggetto.

Se stiamo parlando della fase di esecuzione, penso che sia una pratica normale usare gli enum solo quando si specificano valori/coppie. E per memorizzarli, usate un tipo base semplice.

 
Aleksey Mavrin:

Si può fare un array, una lista e un contenitore, a seconda del compito. Per come la vedo io, probabilmente hai bisogno di semplificare la scrittura del codice, quindi puoi dividere gli enum in gruppi e combinarli in strutture per i parametri di ogni oggetto.

Se stiamo parlando della fase di esecuzione, penso che sia una pratica normale usare gli enum solo quando si specificano valori/coppie. E per memorizzarli, usate un tipo base semplice.

l'ho fatto all'inizio, mi sono allontanato da esso per qualche motivo, sembra che ci fossero problemi con l'inizializzazione di tali campi, o meglio con le varianti di enum a completamento automatico in ME in qualche build, forse a causa del fatto che parte del codice in un altro iniettore era.... esaminiamo questa opzione.


navigato in internet, voglio qualcosa di Sharp come questo... alcune proprietà ((((.

 public class COrder
    {
        public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
        public enum E_VOLUME { FIXED, INC, DEC }
        public E_MOTION OrderMotionType { get; set; }
        public E_VOLUME OrderVolumeType { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var current = new COrder { OrderMotionType = COrder.E_MOTION.HIGHER, OrderVolumeType = COrder.E_VOLUME.FIXED };
            
        }
    }
 
Igor Makanu:

l'ho fatto all'inizio, per qualche motivo l'ho abbandonato, sembra che ci fossero problemi con l'inizializzazione di tali campi, o meglio con l'autocompletamento delle varianti enum in ME in qualche build, probabilmente perché parte del codice in un altro iniettore era.... esaminiamo questa opzione.


navigato in internet, voglio qualcosa di Sharp come questo... qualche tipo di proprietà (((

Qual è il problema?

Se è uno a uno, allora:

class COrder
{
public:
   enum E_MOTION { HIGHER, LOWER, ZIGZAG };
   enum E_VOLUME { FIXED, INC, DEC };
   E_MOTION orderMotionType;
   E_VOLUME orderVolumeType;
   COrder(E_MOTION _motion, E_VOLUME _volume):orderMotionType(_motion),orderVolumeType(_volume){}
};

void OnStart(){
   COrder* current = new COrder(COrder::HIGHER,COrder::FIXED);
 } 

Questo è se non volete mettere l'enumerazione in uno scope globale.

 
Vladimir Simakov:

Questo è se non volete mettere l'enumerazione nell'ambito globale.

hmm...

Solo che non sapevo come farlo:

 COrder* current = new COrder(COrder::HIGHER,COrder::FIXED);

Grazie!

 

Qualcuno ha una soluzione elegante per JSON per caricare oggetti non complicati?

Ho bisogno di un esempio di tale codice per MQL:

public class COrder
    {
        public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
        public enum E_VOLUME { FIXED, INC, DEC }

        public bool IsRunning { get; set; }
        public int OpenPrice { get; set; }
        public int ClosePrice { get; set; }
        public E_VOLUME OrderVolumeType { get; set; }
        public E_MOTION OrderMotionType { get; set; }
        
    }

    class Program
    {
        static void Main(string[] args)
        {
            var current = new COrder {
                IsRunning = false, 
                OpenPrice = 1200,
                ClosePrice = 1300,
                OrderMotionType = COrder.E_MOTION.ZIGZAG, 
                OrderVolumeType = COrder.E_VOLUME.FIXED };

            string json = JsonSerializer.Serialize<COrder>(current);
            Console.WriteLine(json);
            Console.ReadLine();
        }
    }

{"IsRunning":false,"OpenPrice":1200,"ClosePrice":1300,"OrderVolumeType":0,"OrderMotionType":2}

Il serializzatore MQL è disponibilesu https://www.mql5.com/ru/code/13663

ma non capisco la struttura del corretto attraversamento dei campi

 
Igor Makanu:

Ma non ho idea di come attraversare correttamente i campi dell'oggetto

Le macro sono tutto).
 
Alexey Navoykov:
i macro sono tutto!)

Uh-huh... Proverò a chiedere di nuovo:

AIUTATEMI AD AIUTARE UN ESAMINATORE! PER FAVORE!

 
Igor Makanu:

Uh-huh... Proverò a chiedere di nuovo:

AIUTATEMI E BISOGNA UN ESEMPIO! Per favore!

Beh, se la domanda riguarda specificamente il bypass dei campi, è qualcosa del genere:

#define SERIALIZE5(object, m1, m2, m3, m4, m5)  /* your code */

...

SERIALIZE5(current, IsRunning, OpenPrice, ClosePrice, OrderVolumeType, OrderMotionType);

Puoi elaborare il corpo della macro da solo).

 
Alexey Navoykov:

Beh, se la domanda è specificamente sul field traversal, è più o meno così:

E puoi elaborare il corpo della macro da solo).

OK, questo è qualcosa!

Grazie!

 
D'altra parte, per la serializzazione, è probabilmente meglio specificare esplicitamente i nomi testuali dei campi, in modo da poterli rinominare più tardi nel codice senza preoccuparsi che i file salvati smettano di funzionare.