ООП, шаблоны и макросы в mql5, тонкости и приёмы использования - страница 20

 
Как убрать ограничение на 8 элементов в количестве аргументов макросов, мне не хватает 8 элементов?
 
Seric29:
Как убрать ограничение на 8 элементов в количестве аргументов макросов, мне не хватает 8 элементов?

Макрос в макросе писать.

Почему бы просто функции не писать? 

 

есть ли возможность с помощью макроса убирать / удалять модификатор const ? и отключать это когда потребуется?

ЗЫ: есть код:

class COrder {
private:
//--- const to send order
   const int         c_cmd;
   const double      c_volume;
   double            c_price;
   const int         c_magic;
   const int         c_stoploss;
   const int         c_takeprofit;
}

решил писать в файл поля класса, а восстанавливать из файла через конструктор, но модификатор const будет мешать это выполнить

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

 
Igor Makanu:

есть ли возможность с помощью макроса убирать / удалять модификатор const ? и отключать это когда потребуется?

#define const
 
fxsaber:

хм, так просто?!

а как тогда ограничить участок исходника где я хочу этот макрос применить?

 
Igor Makanu:

а как тогда ограничить участок исходника где я хочу этот макрос применить?

#undef const
 
Igor Makanu:

есть ли возможность с помощью макроса убирать / удалять модификатор const ? и отключать это когда потребуется?

ЗЫ: есть код:

решил писать в файл поля класса, а восстанавливать из файла через конструктор, но модификатор const будет мешать это выполнить

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

А идея в чём? Везде c_cmd константа, а в одной функции не константа? Если так, то это UB (да мкл и не позволит так сделать), ну там из-за read only сегментов, оптимизаций компилятора ...

 
fxsaber:

хм, опять все просто

СПАСИБО!

Vict:

А идея в чём? Везде c_cmd константа, а в одной функции не константа? Если так, то это UB (да мкл и не позволит так сделать), ну там из-за read only сегментов, оптимизаций компилятора ...

идея не выдумывать, устал искать оптимальное решение, что сохранять и когда - решил тупо все поля 2-х классов в которых все настройки и текущие состояния сохранять при выставлении нового ордера (многоордерная ТС)


но думал полночи, не хочу уже const отменять, будет отдельная структура с полями по именам полей сохраняемых классов - копипаст за 2-минуты в редакторе ))), ну и сохранять тоже удобно одним вызовом FileWriteStruct()

а восстанавливать состояние буду примерно таким конструктором:

COrder::COrder(SRecovery &property)
:  c_cmd(property.c_cmd),
   c_volume(property.c_volume),
   c_price(property.c_price),
   c_magic(property.c_magic),
   c_stoploss(property.c_stoploss),
   c_takeprofit(property.c_takeprofit)
{

}

при таком вызове конструктора можно инициализировать константные поля

восстановление данных нужно только для перезагрузки терминала

еще не сделал, но уверен на 99% что будет все работать без проблем - единственное не хотел новый тип данных (структура для сохранения) вводить - но так будет проще и код смогу прочитать потом....комментарии же писать не наше это ))))

 
Igor Makanu:

хм, опять все просто

СПАСИБО!

идея не выдумывать, устал искать оптимальное решение, что сохранять и когда - решил тупо все поля 2-х классов в которых все настройки и текущие состояния сохранять при выставлении нового ордера (многоордерная ТС)


но думал полночи, не хочу уже const отменять, будет отдельная структура с полями по именам полей сохраняемых классов - копипаст за 2-минуты в редакторе ))), ну и сохранять тоже удобно одним вызовом FileWriteStruct()

а восстанавливать состояние буду примерно таким конструктором:

при таком вызове конструктора можно инициализировать константные поля

восстановление данных нужно только для перезагрузки терминала

еще не сделал, но уверен на 99% что будет все работать без проблем - единственное не хотел новый тип данных (структура для сохранения) вводить - но так будет проще и код смогу прочитать потом....комментарии же писать не наше это ))))

Если не хочешь временную структуру для записи создавать, то попробуй писать поля в файл поочереди и так же их потом в конструкторе считывать. Далеко не факт, что быстрее получится, но вот код точно "страшнее" на вид будет.
 
fxsaber:
Не то. Ему аналог const_cast нужен, а его нет.