Вопросы по ООП в MQL5 - страница 60

 
Igor Makanu:

и снова здравствуйте!


такой вопрос, есть enum , нужны или массив enum или список enum или контейнер enum - что то где хранить сейчас 7 enum , но аппетиты растут, возможно будет 70 enum 


куда ?

и массив и список и контейнер можно сделать в зависимости от задачи. Как я понял , скорее всего вам надо упростить написание кода, тогда можно  энумы разбить на группы и объединить в структуры для параметров каждого объекта.

Если речь об этапе исполнения, то я считаю норм. практика энумы использовать только при задании значений/пар-ров. А для хранения их использовать простой базовый тип.

 
Aleksey Mavrin:

и массив и список и контейнер можно сделать в зависимости от задачи. Как я понял , скорее всего вам надо упростить написание кода, тогда можно  энумы разбить на группы и объединить в структуры для параметров каждого объекта.

Если речь об этапе исполнения, то я считаю норм. практика энумы использовать только при задании значений/пар-ров. А для хранения их использовать простой базовый тип.

делал так сначала, почему то ушел от этого, кажется появились проблемы с инициализацией таких полей, вернее с автоподстановкой вариантов enum в МЕ в каком то билде, возможно из за того что часть кода в другом инклуднике была.... покручу этот вариант


прошелся по интернету, что то такое Шарповское хочется... некие свойства (((

 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:

делал так сначала, почему то ушел от этого, кажется появились проблемы с инициализацией таких полей, вернее с автоподстановкой вариантов enum в МЕ в каком то билде, возможно из за того что часть кода в другом инклуднике была.... покручу этот вариант


прошелся по интернету, что то такое Шарповское хочется... некие свойства (((

А в чем проблема?

Если один в один, то:

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);
 } 

Это если перечисления в глобальную область видимости не хочется выносить.

 
Vladimir Simakov:

Это если перечисления в глобальную область видимости не хочется выносить.

хм...

а я просто вот так не умел:

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

Спасибо!

 

есть у кого элегантное решение как выгрузить несложные объекты в JSON ?

в общем опять нужен пример такого кода под 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}

сериализатор под MQL есть то https://www.mql5.com/ru/code/13663

а вот структуры правильного обхода полей обьекта я не представляю

 
Igor Makanu:

а вот структуры правильного обхода полей обьекта я не представляю

Макросы - наше всё )
 
Alexey Navoykov:
Макросы - наше всё )

угу... попробую так еще спросить:

хелп ми ай нид ан экзампл! плиз!

 
Igor Makanu:

угу... попробую так еще спросить:

хелп ми ай нид ан экзампл! плиз!

Ну если вопрос конкретно про обход полей, то примерно в таком виде:

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

...

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

А уж с телом макроса сами разберётесь )

 
Alexey Navoykov:

Ну если вопрос конкретно про обход полей, то примерно в таком виде:

А уж с телом макроса сами разберётесь )

ОК, уже хоть что то

Спасибо!

 
Хотя с другой стороны, для сериализации наверно лучше явно задавать текстовые названия полей.  Чтоб потом можно было свободно переименовывать их в коде, не боясь, что сохранённые файлы перестанут работать.