Ошибки, баги, вопросы - страница 2472

 

Создаю кастомный символ и заполняю его дневными барами за 25 лет, это должно весить примерно 400 кб.  Однако в папке символа создаются .hcc файлы суммарным размером 15 мб!  И вдобавок всё это занимает около 20 секунд!  Ни в какие ворота не лезет...  Как это можно объяснить?

 
Sergey Dzyublik:

С удивлением обнаружил возможность объявления typedef с указателем на шаблонную функцию.
Однако счастье не оказалось долгим.

О чем я и говорил
 

За последнее время предоставлено информацию о десятке "особенностей" работы и багов в МТ.
Как узнать стоит ждать их исправление или нет?
Прошу не предлагать тестить все каждый раз при выходе нового билда.

 (не исправлено в MT5(build 2057)) "Тестер стратегий: запланировано 2 прохода, но на практике бесконечное число проходов > 900шт из-за ошибки "OnInit critical error"".
 (не исправлено в MT5(build 2057))  "Некорректное значение поля размер массива в рамках работы дефолтного оператора присваивания для структур с динамическими массивами".
 (не исправлено в MT5(build 2057))  "Компилятор не видит дефолтный конструктор копирования для класса при возвращении объекта класса по значению из функции".
  и  (не исправлено в MT5(build 2057))  "Ошибка компиляции при выполнении type cast "самого в себя" для шаблонных классов и "сложных" структур".
 (не исправлено в MT5(build 2057))  "При работе с typedef использование шаблонной функции с явной специализацией не вызывает генерацию кода этой шаблонной функции".
 (не исправлено в MT5(build 2057)) "Ошибка компиляции при повторном использовании одной и той же сигнатуры функции в рамках typedef".
 (не исправлено в MT5(build 2057))  "Значительная часть функций для работы со строками не работает с NULL символами в строке (например: ShortArrayToString, StringInit, StringFill)".
 (не исправлено в MT5(build 2057))  "Функция StringSetLength работает только в сторону "обрезания" длины строки, но не увеличения".
 (исправлено в MT5(build 2057)) "Тестер стратегий: запуск 750 процессов "metatester64.exe"".
 "Форум www.mql5.com, при правке сообщения с картинкой, предыдущая картинка не заменяется на новую".


Предложения:
 "Предоставить пользователю возможность принудительной генерации/удаления кода для оператора присвоения (конструктор копирования) по умолчанию".
 "Разрешить функции ArrayCopy копировать классы и "сложные" структуры, аналогично тому как структуры предоставляют функционал deep copy для любого типа объекта".
 "Предоставить пользователю функционал для чтения/установки значения Capacity при работе с динамическими массивами"

 "Изменения по улучшению инфографики сервиса "Сигналы""

 
A100:
О чем я и говорил

Шаблонный typedef и использование typedef в шаблонном классе - это разные вещи.
Второй вариант рабочий, но возникает проблема с перекрытием пространства имен при повторном использовании шаблонного класса с другим типом.

 
Alexey Navoykov:

Создаю кастомный символ и заполняю его дневными барами за 25 лет, это должно весить примерно 400 кб.  Однако в папке символа создаются .hcc файлы суммарным размером 15 мб!  И вдобавок всё это занимает около 20 секунд!  Ни в какие ворота не лезет...  Как это можно объяснить?

Посмотрите, что записалось.

 
fxsaber:

Посмотрите, что записалось.

Ну формата hcc я не знаю, поэтому не могу проверить, что там в файле.  А в терминале показывает дневные бары.  При переключении на меньший таймфрейм вижу те же самые бары.  Cудя по всему, он ВСЕ таймфреймы тоже сохраняет в файл изначально, так чтоль...   Я полагал, сохраняются только минутки, из которых потом уже синтезируются все остальные таймфреймы.  А число минутных баров, как уже сказано, совпадает с дневками, т.е. всего имеется около 7000 минутных баров.

Т.е. у меня такое предположение, что он сохраняет в файл  7000*М1, 7000*М2, 7000*М3 и т.д. вплоть до 7000*D1, тогда наверно и накрутит 15 Мб в итоге.  Если так, то это бред полнейший.   Но даже учётом этого непонятно, почему оно затрачивает аж 20 секунд!  Поправочка: около 5 секунд  (20 - это при обновлении имеющейся истории).

 

Что-то сломалось на сайте форума: не вижу своих последних сообщений.
Например, это и это отсутствуют во "Всех сообщениях
И вроде раньше рейтинг был более 6000 еще несколько месяцев назад. Хотя не знаю - может рейтинг может уменьшаться со временем от меньшей активности.  

 
class A{
public:
   struct AA{
      uchar data[8];
   };
   static AA obj;
};

AA A::obj = {0};     // OK


template<typename T>
class B{
public:
   struct BB{
      T data[8];
   };
   static BB obj;
};

template<typename T>
BB B::obj = {0};       //'BB' - declaration without type    




void OnStart(){  
   ArrayPrint(A::obj.data);
   //ArrayPrint(BB<int>::obj.data);
}


На текущий момент не возможно использовать статическую переменную, объявленную внутри шаблонного класса.
С внедрением пространства имен, данное ограничение можна будет обойти?

 
Sergey Dzyublik:


На текущий момент не возможно использовать статическую переменную, объявленную внутри шаблонного класса.
С внедрением пространства имен, данное ограничение можна будет обойти?

Дело не в переменной. Он класс BB не видит.  Его нужно вынести за пределы класса B  как  template<typename T> class BB;

 
Alexey Navoykov:

Дело не в переменной. Он класс BB не видит.  Его нужно вынести за пределы класса B  как  template<typename T> class BB;

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

Повторюсь, проблема касается не возможности использовать статическую переменную, объявленную внутри шаблонного класса.
Что предложите делать в случаи с typedef:

 
class A{
public:
   typedef void (*callback_A)();
   static callback_A f_ptr;

};
callback_A A::f_ptr = NULL;                  // Ok


template<typename T>
class B{
public:
   typedef T (*callback_B)();
   static callback_B f_ptr;
};
template<typename T>
callback_B B::f_ptr = NULL;                  //'callback_B' - declaration without type	

void func_A(){PRINT(__FUNCSIG__);}
int func_B(){PRINT(__FUNCSIG__); return 0;}

void OnStart(){  
   A::f_ptr = func_A;
   A::f_ptr();

   //B<int>::f_ptr = func_B;
   //B<int>::f_ptr();
}