Перечисление MT4

Я использую перечисление MT4 для ввода выбора:

enum ENUM_myChoice{ 
     a, b, c, e, f, g
     };

Проблема в том, что если мне нужно добавить "d" в список в алфавитном порядке,
все мои шаблоны используют e, f или g испорчены, потому что они отклоняются на 1.

Есть ли элегантное решение для этого или только грубая сила?

заранее спасибо


person TheRumpledOne    schedule 30.12.2016    source источник
comment
Обязательно ли параметры в списке должны быть в алфавитном порядке?   -  person user3722096    schedule 31.12.2016
comment
Вам может понравиться тот факт, что синтаксис MQL4 enum — это не list, а скорее статический синтаксический конструктор сахара. Может понравиться ответ и предлагаемое решение ниже + мои другие сообщения о продвинутом MQL4 и проблемах с малой задержкой ››› stackoverflow.com/   -  person user3666197    schedule 01.01.2017
comment
Кто-то на другом форуме дал мне простое решение: enum ENUM_myChoice{ a=1, b=2, c=3, e=4, f=5, g=6 }; Теперь добавьте d: enum ENUM_myChoice{ a=1, b=2, c=3, d=7, e=4, f=5, g=6}; ВЫБОР = EnumToString(ENUM_myChoice); Спасибо всем, кто нашел время ответить. Я ценю вашу готовность помочь.   -  person TheRumpledOne    schedule 01.01.2017
comment
@TheRumpledOne Возможно, вы уже знаете, что другое решение не решает основную проблему, оно оставляет за вами контроль очередности (не оказывает добросовестной услуги, поскольку позволяет вам совершить ошибку и потерять ключевое преимущество - всегда иметь правильно упорядоченные элементы ENUM, даже если они вставлены вне порядка). Не стесняйтесь следовать сетевому этикету StackOverflow и нажимайте +1 UpVote для полезных вопросов и ответов — так работает сообщество StackOverflow и как выразить свою благодарность.   -  person user3666197    schedule 02.01.2017


Ответы (1)


Как работает синтаксис MQL4 enum anEnumNAME{...};?

Что ж,
учитывая, что вам нужно сохранить
оба "старого" enum (тот, что без "d") порядок< br> и в алфавитном порядке-тоже
только одно можно сказать наверняка - вы не можете использовать enum как предложенный выше для этого.

MQL4 реализует enum как синтаксический сахар для регистрации "именованных констант" на этапе компиляции и переводит такие элементы в упорядоченное перечисление нового конкретного типа данных (не сопоставление других типов данных языка со строгой типизацией на этапе компиляции).

Правило: если определенное значение не присвоено именованной константе, входящей в перечисление, ее новое значение будет сформировано автоматически. Если это первый элемент перечисления, ему будет присвоено значение 0. Для всех последующих элементов значения будут рассчитываться на основе значения предыдущих элементов путем добавления единицы.

Это означает, что вы не можете смешивать и искажать алфавитный порядок и случайный последовательный порядок (как утверждает Голливуд в завершающих заголовках: "В порядке появления").


Итак, что можно сделать?

Решение Rainman («Отправиться в Холбрук с Чарли Бэббитом.»):

enum ENUM_myChoice{ 
     a = uchar( "a" ),
     b = uchar( "b" ),
     c = uchar( "c" ),
     e = uchar( "e" ),
     f = uchar( "f" ),
     g = uchar( "g" ),
  // ----------------- WHERE ONE CAN BENEFIT AN OUT-OF-ORDINAL ORDER ADDING:
     d = uchar( "d" )
     };
person user3666197    schedule 31.12.2016
comment
Кто-то на другом форуме дал мне простое решение: enum ENUM_myChoice{ a=1, b=2, c=3, e=4, f=5, g=6 }; Теперь добавьте d: enum ENUM_myChoice{a=1, b=2, c=3, d=7, e=4, f=5, g=6}; ВЫБОР = EnumToString(ENUM_myChoice); Спасибо всем, кто нашел время ответить. Я ценю вашу готовность помочь. - person TheRumpledOne; 01.01.2017
comment
Возможно, вы уже знаете, что другое решение не решает основную проблему, оно оставляет за вами контроль очередности (не оказывает честной услуги, поскольку позволяет совершить ошибку и утратить ключевое преимущество -- наличие всегда правильно упорядоченных элементов ENUM, даже если они вставлены вне порядка ). Не стесняйтесь следовать сетевому этикету StackOverflow и нажимайте +1 UpVote для полезных вопросов и ответов — так работает сообщество StackOverflow и как выразить свою благодарность. - person user3666197; 02.01.2017
comment
user3666197: Я не уверен, что понимаю, что вы говорите. Решение решило мою проблему. Да, я должен расположить варианты в алфавитном порядке. Но какой у меня есть другой выбор? Спасибо за ответ. - person TheRumpledOne; 03.01.2017