enum ENUM_MY { MY_PARAM_1, MY_PARAM_2, MY_PARAM_3, MY_PARAM_4 }; input ENUM_MY MyParam = MY_PARAM_2; //+------------------------------------------------------------------+ void OnStart() { switch(MyParam) { case MY_PARAM_1: break; case MY_PARAM_2: break; case MY_PARAM_3: break; case MY_PARAM_4: break; } }Перечисления
Небольшое уточнение: мне нужно засунуть обработку MyParam в функцию, которая будет вызываться через include, то есть напрямую туда глобальную переменную не внесешь, только через параметры. Чтобы это выглядело примерно так:
enum ENUM_MY { MY_PARAM_1, MY_PARAM_2, MY_PARAM_3, MY_PARAM_4 }; input ENUM_MY MyParam = MY_PARAM_2; void OnStart() { Alert(select_param(MyParam)); } string select_param(int param) { string result=""; switch(param) { case MY_PARAM_1: result=1; break; case MY_PARAM_2: result=2; break; case MY_PARAM_3: result=3; break; case MY_PARAM_4: result=4; break; } return(result); }
И чтобы компилятор не ругался на неявное преобразование.
Еще можно использовать EnumToString()
Только так и никак иначе?
enum ENUM_MY { MY_PARAM_1, MY_PARAM_2, MY_PARAM_3, MY_PARAM_4 }; input ENUM_MY MyParam = MY_PARAM_2; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { string param_string=EnumToString(MyParam); Alert(select_param(param_string)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string select_param(string param) { string result=""; if(param=="MY_PARAM_1") result="1"; if(param=="MY_PARAM_2") result="2"; if(param=="MY_PARAM_3") result="3"; if(param=="MY_PARAM_4") result="4"; return(result); }
Только так и никак иначе?
enum ENUM_MY { MY_PARAM_1, MY_PARAM_2, MY_PARAM_3, MY_PARAM_4 }; input ENUM_MY MyParam = MY_PARAM_2; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { string param_string=select_param(MyParam); Alert(param_string); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string select_param(ENUM_MY param) { string result=""; if(param==MY_PARAM_1) result="1"; if(param==MY_PARAM_2) result="2"; if(param==MY_PARAM_3) result="3"; if(param==MY_PARAM_1) result="4"; return(result); }
Возвращаемое значение функции может быть любым.
Небольшое уточнение: мне нужно засунуть обработку MyParam в функцию, которая будет вызываться через include, то есть напрямую туда глобальную переменную не внесешь, только через параметры. Чтобы это выглядело примерно так:
Тогда не понимаю, в чем проблема. Вы ведь сами привели решение.
И чтобы компилятор не ругался на неявное преобразование.
Присваивайте переменной result сразу строку, а не целое значение.
Только так и никак иначе?
Так Вам нужно вернуть именно порядковый номер перечисления? Тогда все просто:
Print(int(MyParam));
Возвращаемое значение функции может быть любым.
Внутри include не работает:
// i1.mqh string select_param(ENUM_MY param) { string result=""; if(param==MY_PARAM_1) result="1"; if(param==MY_PARAM_2) result="2"; if(param==MY_PARAM_3) result="3"; if(param==MY_PARAM_1) result="4"; return(result); }
Основной код:
#include <i1.mqh> enum ENUM_MY { MY_PARAM_1, MY_PARAM_2, MY_PARAM_3, MY_PARAM_4 }; input ENUM_MY MyParam = MY_PARAM_2; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { string param_string=select_param(MyParam); Alert(param_string); }
Присваивайте переменной result сразу строку, а не целое значение.
Блин точно, похоже именно в этом и затупил :/
//------------------------------------------------------------------
Но нет, в include функция все же не работает:
string select_param(int param) { string result=""; switch(param) { case MY_PARAM_1: result="1"; break; case MY_PARAM_2: result="2"; break; case MY_PARAM_3: result="3"; break; case MY_PARAM_4: result="4"; break; } return(result); }
Походу остается вариант только с номером перечисления (
Небольшое уточнение: мне нужно засунуть обработку MyParam в функцию, которая будет вызываться через include, то есть напрямую туда глобальную переменную не внесешь, только через параметры. Чтобы это выглядело примерно так:
И чтобы компилятор не ругался на неявное преобразование.
Сами ENUM лучше объявлять так чтоб они были видны глобально везде по вашему коду. Ну а далее работайте как хотите.
enum ENUM_MY { MY_PARAM_1, MY_PARAM_2, MY_PARAM_3, MY_PARAM_4 }; input ENUM_MY MyParam = MY_PARAM_2; void OnStart() { string param_string= IntegerToString((int)MyParam); if( MyParam == MY_PARAM_3 ) { /* bla-bla */ } if( (int)MyParam == 0 ) { /* bla-bla */ } if( MyParam == (ENUM_MY)0 ) { /* bla-bla */ } Alert(param_string); }
Это конечно чтоб не было лишних предупреждений о преобразовании параметров. А так проблем работать с ENUM как таковое ни каких. Главное чтоб имена были оригинальными.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подозреваю, что в чем-то сильно туплю, но сам пока не смог справиться. Задача в следующем:
Есть пользовательское перечисление enum по неким названиям, по цветам например... и есть функция которая должна выдавать результат в зависимости от того какой пункт (цвет) из этого перечисления в нее ввести.
Допустим в свойствах функции я для этого создам переменную типа int, но с чем ее потом сравнивать внутри функции? Ведь это не текст... а просто число применять крайне не хотелось бы, потому что вдруг порядок перечисления изменится.