Можно ли определить тип переменной или элемента в mql4?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Seric29
778
Seric29  
Предположим объявлен массив int Mas[10], у него 10 элементов, нужно определить что тип данного элемента int, или например есть переменная double Price нужно вернуть тип этой переменной double. 
Ihor Herasko
21808
Ihor Herasko  
Seric29:
Предположим объявлен массив int Mas[10], у него 10 элементов, нужно определить что тип данного элемента int, или например есть переменная double Price нужно вернуть тип этой переменной double. 

Тип переменной определить можно:

void OnStart()
{
   double a = -1.9;
   int b = int(a);
   Alert("B type: ", typename(b), ", A type: ", typename(a)); 
}

А вот определить, что переменная является массивом - нет.

Seric29
778
Seric29  
Ihor Herasko:

Тип переменной определить можно:

А вот определить, что переменная является массивом - нет.

А можно ли определить тип массива? всё дело в 

typename
да можно значит сделать список или что-то типа того читаю справку?
Seric29
778
Seric29  
Ihor Herasko:

Тип переменной определить можно:

А вот определить, что переменная является массивом - нет.

void OnStart()
{
   double a = -1.9;
   int b = int(a);
   Alert("B type: ", typename(b), ", A type: ", typename(a)); 
}

typename(b) определяет что b имеет тип int и возвращает int в виде строки или в виде чего?

Artyom Trishkin
Модератор
56630
Artyom Trishkin  
Seric29:

typename(b) определяет что b имеет тип int и возвращает int в виде строки или в виде чего?

Строки

Seric29
778
Seric29  
Artyom Trishkin:

Строки

Плохо что в виде строки а как вернуть не в виде строки а в виде самого int, вернуть в виде свойства чтобы можно было применить это не указывая тип а указав что значение это тип int?

Artyom Trishkin
Модератор
56630
Artyom Trishkin  
Seric29:

Плохо что в виде строки а как вернуть не в виде строки а в виде самого int, вернуть в виде свойства чтобы можно было применить это не указывая тип а указав что значение это тип int?

Как-то менее замысловато можно вопрос задать? Ничего не понял.

Konstantin Nikitin
9253
Konstantin Nikitin  
Seric29:

Плохо что в виде строки а как вернуть не в виде строки а в виде самого int, вернуть в виде свойства чтобы можно было применить это не указывая тип а указав что значение это тип int?

int fun(const int      value=NULL) { /* work */ }
int fun(const uint     value=NULL) { /* work */ }

int fun(const long     value=NULL) { /* work */ }
int fun(const ulong    value=NULL) { /* work */ }

int fun(const short    value=NULL) { /* work */ }
int fun(const ushort   value=NULL) { /* work */ }

int fun(const char     value=NULL) { /* work */ }
int fun(const uchar    value=NULL) { /* work */ }

int fun(const double   value=NULL) { /* work */ }
int fun(const float    value=NULL) { /* work */ }

int fun(const datetime value=NULL) { /* work */ }

В зависимости от того какое значение отправите, та функция и сработает

Dmitry Fedoseev
57623
Dmitry Fedoseev  
Ihor Herasko:

Тип переменной определить можно:

А вот определить, что переменная является массивом - нет.

При помощи перегрузки можно

string MyType(double & a[]){
   return "double array";
}
string MyType(double & a){
   return "double";
}
Igor Makanu
9896
Igor Makanu  
Seric29:

Плохо что в виде строки а как вернуть не в виде строки а в виде самого int, вернуть в виде свойства чтобы можно было применить это не указывая тип а указав что значение это тип int?

#property strict
//+------------------------------------------------------------------+
void OnStart()
  {
   double   a = 1.1;
   float    b = (float)2.2;
   int      c = 3;
   long     d = 4;
   string   e = "5.str";
   Print("a = ",typeof(a));
   Print("b = ",typeof(b));
   Print("c = ",typeof(c));
   Print("d = ",typeof(d));
   Print("e = ",typeof(e));
  }
//+------------------------------------------------------------------+
template<typename T>
T typeof(T value)
  {
   Print("This type is: ",typename(T));
   return(value);
  }
//+------------------------------------------------------------------+

0 09:11:22.060 Script tst_template EURUSD,H1: loaded successfully

0 09:11:22.072 tst_template EURUSD,H1: initialized

0 09:11:22.072 tst_template EURUSD,H1: This type is: double

0 09:11:22.072 tst_template EURUSD,H1: a = 1.1

0 09:11:22.072 tst_template EURUSD,H1: This type is: float

0 09:11:22.072 tst_template EURUSD,H1: b = 2.2

0 09:11:22.072 tst_template EURUSD,H1: This type is: int

0 09:11:22.072 tst_template EURUSD,H1: c = 3

0 09:11:22.072 tst_template EURUSD,H1: This type is: long

0 09:11:22.072 tst_template EURUSD,H1: d = 4

0 09:11:22.072 tst_template EURUSD,H1: This type is: string

0 09:11:22.072 tst_template EURUSD,H1: e = 5.str

0 09:11:22.072 tst_template EURUSD,H1: uninit reason 0

0 09:11:22.073 Script tst_template EURUSD,H1: removed

Seric29
778
Seric29  
Konstantin Nikitin:

В зависимости от того какое значение отправите, та функция и сработает

У меня есть функция которая двигает массивы и я указываю для неё аргументы, я хотел сделать технологию чтобы функция могла автоматически определить тип массива и не нужно было ставить какой это массив, пришла такая идея что может каким-нибудь образом сделать сноску или что такое и вызывать эту сноску и будет происходить самоопределение типа массива. Например 

void Sdv(int &mas[][],double &mas1[],double &mas2[][],datetime &mas3[][],int qt)
{
Расчёты
}
Записываем таким образом
void Sdv("сноска на тип" &mas[][],"сноска на тип" &mas1[],"сноска на тип" &mas2[][],"сноска на тип" &mas3[][],int qt)
{
Расчёты
}

Поэтому я и задаю такие странные вопросы.

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий