Как передать параметры в функцию Mql? - страница 4

 
Viktar Dzemikhau:
вы же можете байндеры реализовать со стороны mql, это же просто подстановка значения вместо вопросика, почти как StringFormat
 
Artyom Trishkin:
Структура - переменная и её тип. Объект, в который входят такие структуры. Массив этих объектов передаёте куда требуется.
Такой вариант имеет место быть. Не очень компактный, но.. за имением иного, пожалуй, вариант.
 
TheXpert:
вы же можете байндеры реализовать со стороны mql, это же просто подстановка значения вместо вопросика, почти как StringFormat

Можно. Но я общался с спецами по СУБД. Так делать не советуют. Лучше привыкать к правильному мышлению я так думаю. Хотя.. можно вообще не байндить, но.. не рекомендуют так делать.

 
Viktar Dzemikhau:

Ну так мне не нужно разное количество параметров, как я уже и говорил. Нужен один. Причина проста.. заранее количество параметров и их тип не известны.

В Мкл нет возможности узнать тип члена структуры. В Java, даже если рефлексию не использовать, у объекта есть все возможности для этого. Запихиваем объекты разных типов в массив объектов и потом, может когда этот массив объектов передадим поулчить значения из массива объектов и их типы. Типы получаются, хотя бы даже посредством принадлежности к классу. А дальше приведение к простому типу.

Вот смотрите. Передаёт мы структуру куда-то. Передали. Хорошо! Как мы узнаем количество членов структуры и типы этих членов?

Выше объяснил всё. Сам не очень то и поспал.

long   lng_var=123;
double dbl_var=321.1;
string str_var="123";
string lng_type = typename(lng_var);
string dbl_type = typename(dbl_var);
string str_type = typename(str_var);
Print("type lng_var=",lng_type,", type dbl_var=",dbl_type,", type str_var=",str_type );
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2018.07.12 22:50

// Возвращает тип переменной. Exact == true - учитывает const-спецификатор
template <typename T>
string GetType( T&, const bool Exact = false )
{
  static const int Offset = StringFind(__FUNCTION__, "<") + 1;

  return(Exact ? StringSubstr(__FUNCTION__, Offset, StringLen(__FUNCTION__) - Offset - 1) : typename(T));
}


Применение

#define PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  const int Var1 = 0;
  double Var2;
    
  PRINT(GetType(Var1));
  PRINT(GetType(Var2));  
  
  PRINT(GetType(Var1, true));
  PRINT(GetType(Var2, true));
}


Результат

GetType(Var1) = int
GetType(Var2) = double
GetType(Var1,true) = const int
GetType(Var2,true) = double