В один метод класса передается значение переменной.
Допустим переменная имеет имя tmp. Со значением этой переменной производятся какие-то действия.
Другой метод класса получает данные из какого-то источника. И должен эти данные передать переменной tmp.
Первый метод может отработать сегодня. А второй метод может запуститься через неопределенное время.
Как можно сохранить имя переменной при ее использовании в первом методе, так чтобы во втором методе в тексте программы явно не задавать имя переменной tmp, а брать его из сохраненного в первом методе источника.
Наборы переменных, с которыми работает первый метод могут быть разными. Соответственно второй метод должен манипулировать с тем набором переменных, которые передавались в первый метод. Но нет желания вручную прописывать названия переменных во втором методе. Можно допустить ошибку в коде. Наборов переменных может быть много и состав их может быть неизвестен заранее.
class CTest { int tmp; ... void funk1() { /*Do something with tmp*/ } void funk2() { /*Do something with tmp*/ } };
В один метод класса передается значение переменной.
Допустим переменная имеет имя tmp. Со значением этой переменной производятся какие-то действия.
Другой метод класса получает данные из какого-то источника. И должен эти данные передать переменной tmp.
Первый метод может отработать сегодня. А второй метод может запуститься через неопределенное время.
Как можно сохранить имя переменной при ее использовании в первом методе, так чтобы во втором методе в тексте программы явно не задавать имя переменной tmp, а брать его из сохраненного в первом методе источника.
Наборы переменных, с которыми работает первый метод могут быть разными. Соответственно второй метод должен манипулировать с тем набором переменных, которые передавались в первый метод. Но нет желания вручную прописывать названия переменных во втором методе. Можно допустить ошибку в коде. Наборов переменных может быть много и состав их может быть неизвестен заранее.
Только из редактора связей.
Только из редактора связей.
Можно ссылку на редактор связей?
На MQL не получится. PL/1 устроит?
Вот так передается значение переменной double tmp_double:
void createButton(int x, int y, int min, int max, double tmp_double, string tooltip) { count++; ArrayResize(mm,count+1,20); mm[count].min=min; mm[count].max=max; // Выводим "кнопку" name_tmp=(string)ExtSet+"_"+m_name_double+(string)count; if (tmp_double<min) tmp_double=min; if (tmp_double>max && max>0) tmp_double=max; if (ObjectFind(name_tmp)==0) ObjectDelete(0,name_tmp); EditCreate(0,name_tmp,0,x,y,50,26,(string)tmp_double,"Arial",12,ALIGN_LEFT,false,CORNER_LEFT_UPPER,clrBlack,clrWhite,clrDarkBlue,false,false,true,10); ObjectSetString(0,name_tmp,OBJPROP_TOOLTIP,tooltip); // увеличиваем параметр if (max==0 || (max>0 && tmp_double<max)) { name_tmp=(string)ExtSet+"_"+m_name_ret_up+(string)count; if (ObjectFind(name_tmp)==0) ObjectDelete(0,name_tmp); BitmapLabelCreate(0,name_tmp,0,x+51,y,"::Images\\Up_new.bmp","::Images\\Up_new.bmp",false,CORNER_LEFT_UPPER,ANCHOR_LEFT_UPPER,false,false,true,10); ObjectSetString(0,name_tmp,OBJPROP_TOOLTIP,"\n"); } // уменьшаем параметр if (tmp_double>min) { name_tmp=(string)ExtSet+"_"+m_name_ret_dn+(string)count; if (ObjectFind(name_tmp)==0) ObjectDelete(0,name_tmp); BitmapLabelCreate(0,name_tmp,0,x+51,y+14,"::Images\\Dn_new.bmp","::Images\\Dn_new.bmp",false,CORNER_LEFT_UPPER,ANCHOR_LEFT_UPPER,false,false,true,10); ObjectSetString(0,name_tmp,OBJPROP_TOOLTIP,"\n"); } }
значения min и max сохраняются в структуре.
А вот так потом обрабатывается от другого источника эта же переменная double& _param:
void EditField(string tmp_edit, double& _param, int x) { double min=mm[x].min; double max=mm[x].max; _param=(double)tmp_edit; if (max>0) { if (_param>max) _param=max; } if (_param<min) _param=min; };
Сейчас приходится явно прописывать имя переменной во входных параметрах в обеих методах. Со значениями min и max решено элегантно. А вот с самой переменной не получается.
Это только для типа double. А там еще есть и другие типы.
void createButton(int x, int y, int min, int max, bool tmp_bool, string tooltip) void createButton(int x, int y, int min, int max, int& tmp_int, string tooltip) void createButton(int x, int y, int min, int max, double tmp_double, string tooltip) void createButtonIf(int x, int y, int min, int max, int tmp_int, string tooltip, bool yes) void createButtonIf(int x, int y, int min, int max, double tmp_double, string tooltip, bool yes) И последующие обработчики: void EditArrow (bool UpDn, int& _param, int x) void EditArrow (bool UpDn, double& _param, int x) void EditField(string tmp_edit, int& _param, int x) void EditField(string tmp_edit, double& _param, int x) void EditGrossPeriod (bool UpDn)
На MQL не получится. PL/1 устроит?
Сейчас используется где-то 20-30 переменных. В 15 менюшках.
А дальше будет в нескольких менюшках более сотни переменных. Переменные будут в разных комбинациях.
Увязывать взаимосвязи, прописывая явно названия переменных, можно. Но очень велика вероятность внесения ошибки.
Если имеются реализации поставленной задачи на других языках, то можно ее реализовать и на любом другом языке.
Просто реализация на другом языке скрыта от пользователя. При создании своей реализации вопрос упирается в эффективность создаваемого алгоритма.
Разобрался, как можно с помощью MQL решить поставленную задачу.
Если имеются реализации поставленной задачи на других языках, то можно ее реализовать и на любом другом языке.
Просто реализация на другом языке скрыта от пользователя. При создании своей реализации вопрос упирается в эффективность создаваемого алгоритма.
Разобрался, как можно с помощью MQL решить поставленную задачу.
Пример можете показать?
void EditArrow (bool UpDn, int& _param, int x) void EditArrow (bool UpDn, double& _param, int x) void EditField(string tmp_edit, int& _param, int x) void EditField(string tmp_edit, double& _param, int x)
должно работать аналогично:
template<typename T> void EditArrow(bool UpDn,T &_param,int x) template<typename T> void EditField(string tmp_edit,T &_param,int x)
ну и по сабжу, если переменных под сотню, то только в массивы уходить, чтобы не путаться какая часть массива кому принадлежит сделайте макропостановки
не понятно почему такая ситуация у ТС, вроде все в классах, а передается по одной переменной, обычно класс это законченная "боевая единица", если функционал оказывается недостаточным, то наследуется и дописываются новые методы

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В один метод класса передается значение переменной.
Допустим переменная имеет имя tmp. Со значением этой переменной производятся какие-то действия.
Другой метод класса получает данные из какого-то источника. И должен эти данные передать переменной tmp.
Первый метод может отработать сегодня. А второй метод может запуститься через неопределенное время.
Как можно сохранить имя переменной при ее использовании в первом методе, так чтобы во втором методе в тексте программы явно не задавать имя переменной tmp, а брать его из сохраненного в первом методе источника.
Наборы переменных, с которыми работает первый метод могут быть разными. Соответственно второй метод должен манипулировать с тем набором переменных, которые передавались в первый метод. Но нет желания вручную прописывать названия переменных во втором методе. Можно допустить ошибку в коде. Наборов переменных может быть много и состав их может быть неизвестен заранее.