Новая версия платформы MetaTrader 5 build 2715: Общие улучшения - страница 9

 
Denis Kirichenko:

Коллега, я конечно ценю Ваши усилия... но в описанном случае нужно простое решение, без тысячи действий в миллисекунду... А там пускай кодер сам решает, как дальше усложнять классы из СБ. А пока, мне кажется, что в торговых классах не хватает унификации...

Это не торговые классы. Работают даже в индикаторах.

 

Вин 10 - 64 , билд 2715 - зависает, скорее всего когда окно терминала сложено

запущен один скрипт и открыто 2 чарта

исходник скрипта https://www.mql5.com/ru/forum/334987#comment_19618682

терминал секунд 40-50 висел, потом вроде ожил



UPD: пока пи сал пост, был активным браузер, свернул браузер... опять висит МТ5

UPD:  добавил Sleep(1) в бесконечный цикл, вроде не подвисает терминал.... а раньше так себя вел только МТ4 - там нельзя без  Sleep() зацикленные скрипты запускать

 
Баг компилятора.
void Print( const MqlTick &[] ) {} // Без const работает.

void OnStart()
{
  MqlTick Ticks[];

  Print(Ticks); // 'Ticks' - invalid array access, 'Ticks' - objects are passed by reference only
}
 
fxsaber:
Баг компилятора.



перегрузки нет вне зависимости от количества параметров и их типов.

а так все работает:

void _Print( const MqlTick &[] ) {} // Без const работает.

void OnStart()
{
  MqlTick Ticks[];

  _Print(Ticks); 
}

 
Nikolai Semko:

перегузки нет вне зависимости от количества параметров и их типов.

Там полноценная перегрузка. При этом еще и работает без const-модификатора.

 
fxsaber:

Там полноценная перегрузка. При этом еще и работает без const-модификатора.

как может быть перегружена функция с любым количеством параметров и любыми типами?

 
fxsaber:

Там полноценная перегрузка. При этом еще и работает без const-модификатора.

Прикол. А перегрузка то действительно есть:

void Print( int i) {printf("Hello World");} 
void OnStart()
{
  int i=5;

  Print(i);  
}


 
Nikolai Semko:

как может быть перегружена функция с любым количеством параметров и любыми типами?

Массивами.

 
fxsaber:

Массивами.

а, понял ваш косяк:


так все работает:

void Print( MqlTick &i) {printf("Hello World");} 
void Print( MqlTick &i[]) {printf("Hello World Array");} 
void OnStart()
{
  MqlTick Tick;
  MqlTick Ticks[];
  Print(Tick); 
  Print(Ticks); 
}


ЗЫ Хотя очень странно что эта функция перегружается не массивами
ЗЫЗЫ Впрочем ничего странного. Нормальное поведение.

ЗЫЗЫЗЫ  Ничего не понимаю. А почему тогда этот вариант работает с ошибкой - нет имени параметра:

void _Print( const MqlTick &[] ) {printf ("Hello World");} 

void OnStart()
{
  MqlTick Ticks[];
  _Print(Ticks); 
}

а такой не работает:

void Print( const MqlTick &[] ) {printf ("Hello World");} 

void OnStart()
{
  MqlTick Ticks[];
  Print(Ticks); 
}


Наверное потому, что компилятор во втором случае выбирает штатный вариан функции, а не перегруженный. 
Тогда странно, почему компилятор не ругается в первом случае.

 
Nikolai Semko:

а, понял ваш косяк:

Это не косяк. Имена входных указывать необязательно.