Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подключи MQL5 Cloud Network. Начни зарабатывать!
Vladimir Pastushak
68591
Vladimir Pastushak 2015.06.17 16:55 
Собственно вопрос в теме, я чет никак не вспомню и не соображу, можно ли определить какого типа переменная програмно , double или int или string ???
George Merts
3594
George Merts 2015.06.17 17:01  

А пример кода, где это нужно, можно ?

Для классов, наследованных от общего предка с их полиморфизмом это делается несложно, но чтобы цифру и строку перепутать ?

Vladimir Pastushak
68591
Vladimir Pastushak 2015.06.17 17:03  
George Merts:
А пример кода, где это нужно, можно ?

например функция по модернизации ордеров

в нее через глобальные переменные мы можем отправить тип int и тогда функция сделает перевод значений используя поинт или мы можем отправить тип double и тогда функция не будет делать лишних вычислений....

То есть если мы отправляем в функцию значение 300 то функция переводит 300 в 0,00300 а если мы отправляем значение типа 1,23456 то функция не делает лишних вычислений..

Anatoli Kazharski
56846
Anatoli Kazharski 2015.06.17 17:07  
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double d_value =0.0;
   int    i_value =0;
   Print("d_value: type=",GetTypeName(d_value));
   Print("i_value: type=",GetTypeName(i_value));
  }
//+------------------------------------------------------------------+
//| Возвращает в строковом виде тип                                  |
//+------------------------------------------------------------------+
template<typename T>
string GetTypeName(const T &t)
  {
   return(typename(T));
  }
Vladimir Pastushak
68591
Vladimir Pastushak 2015.06.17 17:10  
Anatoli Kazharski:
От спасибо тебе умный Человек! Помог! Плюсанул бы в репу, но негде....
Anatoli Kazharski
56846
Anatoli Kazharski 2015.06.17 17:10  
Vladimir Pastushak:
От спасибо тебе умный человек! Помог! Плюсанул бы в репу, но негде....

Пожалуйста. Этот пример есть в справке. )

Шаблоны функций >>>

George Merts
3594
George Merts 2015.06.17 17:14  
Vladimir Pastushak:
 

в нее через глобальные переменные мы можем отправить тип int и тогда функция сделает перевод значений используя поинт или мы можем отправить тип double и тогда функция не будет делать лишних вычислений....

На мой взгляд, опасная практика.

Но, насколько я понимаю, после преобразования в double ты никак не можешь понять, что это былa int переменная, а не округленная до целого double.

З.Ы.

Да, с шаблонами можно одну функцию для двух разных типов сделать.

Vladimir Pastushak
68591
Vladimir Pastushak 2015.06.17 17:16  
George Merts:

На мой взгляд, опасная практика.

Но, насколько я понимаю, после преобразования в double ты никак не можешь понять, что это былa int переменная, а не округленная до целого double.

Я хочу написать функцию при отправке в которую чначения типа 1,23456 тейк ставится напрямую на эту цену, а при отправке значения 300 что бы пересчитывался в 0,00300 и ордер опен прайс + 0,00300
Vitalii Ananev
8116
Vitalii Ananev 2015.06.17 17:24  

А перегрузкой методов (функций) не пробовали пользоваться. Имена функций одинаковые но тело функции выполняет разные действия в зависимости от типа переданного ей параметра

double fun(double P)
{
 //действие с переменной типа double P 
  return(P);
} 

int fun (int P)
{
  //действие с переменной типа int P
  return(P);
}
Vladyslav Goshkov
2067
Vladyslav Goshkov 2015.06.17 17:24  
Vladimir Pastushak:
Я хочу написать функцию при отправке в которую чначения типа 1,23456 тейк ставится напрямую на эту цену, а при отправке значения 300 что бы пересчитывался в 0,00300 и ордер опен прайс + 0,00300

Лучше сделать перегрузку функции: на вход то что Вы спрашиваете, выход - уровень тейка, например.

double f(int a){}
double f(double a){}

 в каждой функции свой метод расчета.

Vladimir Pastushak
68591
Vladimir Pastushak 2015.06.17 18:26  
Vladyslav Goshkov:

Лучше сделать перегрузку функции: на вход то что Вы спрашиваете, выход - уровень тейка, например.

 в каждой функции свой метод расчета.

Я думал на этим но это не комфортно ...
12345
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий