существует ли какая-то функция "StringToEnum" или альтернатива?

 

Здравствуйте, если:

string a = EnumToString(MODE_SMMA);

я получаю:

a ="MODE_SMMA"

Теперь, я хотел бы получить функцию, которая делает все наоборот, я имею в виду что-то вроде:

int b = StringToEnum("MODE_SMMA");

b = 2

где 2 - значение int, связанное с константой:"MODE_SMMA".


С уважением, cyberglassed.

 
MODE_SMMA

уже является целочисленным значением 2.

Print(IntegerToString(MODE_SMMA));
 
https://www.mql5.com/en/docs/convert имеет большой групповой список функций преобразования.
Documentation on MQL5: Conversion Functions
Documentation on MQL5: Conversion Functions
  • www.mql5.com
Conversion Functions - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

уже является целочисленным значением 2.

То, что вы говорите, не соответствует моим потребностям. Как вы можете прочитать в моем вопросе, я знаю, как преобразовать значение перечисления в строку, но я хочу сделать прямо противоположное:

с помощью кода:

int b = StringToEnum("MODE_SMMA");

Я хочу получить следующее:

b = 2

 

Не существует StringToEnum.

MODE_SMMA

уже является целочисленным значением 2.

   int b=MODE_SMMA;
   Print("b= ",b);



int b;

string StringToEnum="MODE_SMMA";

if(StringToEnum=="MODE_SMMA"){b=2;}

Print("b= ",b);



 
cyberglassed:

То, что вы говорите, не соответствует моим потребностям. Как вы можете прочитать в моем вопросе, я знаю, как преобразовать значение перечисления в строку, но я хочу сделать прямо противоположное:

с помощью кода:

int b = StringToEnum("MODE_SMMA");

Я хочу получить следующее:

b = 2

Вы также спросили, есть ли альтернатива, на что Марко указал.
 

спасибо вам, ребята

 

Спасибо Ален за совет, но на самом деле у меня нет хорошего решения для моей проблемы,
поэтому мне приходится прибегать к странным обходным путям.
Было бы очень хорошо, если бы mql5 поддерживал динамическую оценку кода, как функция eval(...) в PHP и Javascript,
тогда мы могли бы загружать небольшие фрагменты кода из внешних файлов (иногда очень интересные) и даже реализовать функцию: StringToEnum легко как:

int StringToEnum(string enumId) {
eval("return " + enumId + ";");
}

Другими словами, с помощью функции eval(...) мы могли бы решать множество задач одновременно.

Это может быть очень интересным советом для команды разработчиков MT5.

Спасибо, Cyberglassed.
 
cyberglassed:

Спасибо Ален за совет, но на самом деле у меня нет хорошего решения для моей проблемы,
поэтому мне приходится использовать некоторые странные обходные пути.
Было бы очень хорошо, если бы mql5 поддерживал динамическую оценку кода, как функция eval(...) в PHP и Javascript,
тогда мы могли бы загружать небольшие фрагменты кода из внешних файлов (иногда очень интересные) и даже реализовать функцию: StringToEnum легко как:

int StringToEnum(string enumId) {
eval("return " + enumId + ";");
}

Другими словами, с помощью функции eval(...) мы могли бы решать множество задач одновременно.

Это может быть очень интересным советом для команды разработчиков MT5.

Спасибо, Cyberglassed.
В MQL уже есть возможность загружать либо внешние библиотеки (как DLL), либо определенные #include файлы и делать это таким образом. Поскольку MQL также является ООП языком, теоретически, вы можете написать код этой функции самостоятельно и просто включить ее в ваши программы, в которых вам нужна эта функциональность. Либо в код вашего советника, либо как внешний файл.
 
JD4:
В MQL уже есть возможность загружать либо внешние библиотеки (как DLL), либо определенные #include файлы и делать это таким образом. Поскольку MQL также является ООП языком, теоретически, вы можете написать код этой функции самостоятельно и просто включить его в свои программы, в которых вам нужна эта функциональность. Либо в код вашего эксперта, либо как внешний файл.

Спасибо JD4, но к сожалению это не решает моих требований, потому что когда вы загружаете внешнюю DLL вы передаете ей некоторые параметры и получаете результат на основе этих параметров, это хорошо, но там вы программируете на другом языке/среде/месте, а не точно в mql5. Я программировал пользовательские DLL и загружал их в mql5, когда для меня не имеет значения язык, который будет обрабатывать мои параметры, но в этом потоке я хотел, чтобы данные обрабатывались на mql5, чтобы я мог использовать (например) локальные и глобальные переменные. Если вы используете внешние DLL, то там вы не будете знать о значениях локальных и глобальных переменных, потому что это как бы внешняя машина обработки. Затем, если в mql5 есть функция типа eval(...) (сейчас это не так, потому что не реализовано), то вы можете использовать глобальные и локальные переменные, и даже функции.