Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 31
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Посмотрите пример в статье https://www.mql5.com/ru/articles/1514
15 лет, оказывается, уже прошло.
Спасибо, прочел.
Получается, что есть некая базовая болванка в виде mq5-файла. Делаем Save as и допиливаем, что нужно.
С появлением ООП, все сводится уже к конструированию из сущностей, заданных в соответствующих mqh-файлах. Наследование и допиливание виртуальных функций. В таких случаях, как правило, mq5-файл остается всегда один и тот же, к нему только подключается новый mqh-файл.
Видимо, с шаблонами какое-то исторические наследие тянется.
Видимо, с шаблонами какое-то исторические наследие тянется.
Шаблоны и сниппеты, в принципе да, историческое наследие.
Но с шаблонами намного быстрее начинать новую программу.
Сниппеты так-же ускоряют процесс ввода повторяющегося кода, в ходе разработки.
Такие фишки в основном реализованы в C редакторах, ввиду многословной структуры ЯП.
Чем и схож ЯП MQL5 - многословной структурой.
Зачастую ООП по сути не нужен, если структура ЯП придерживается C-style.
Спасибо за сообщение.
Действительно при автогенерации оператора копирования для полей-массивов используется вызов ArrayCopy.
Исправлю, для массивов фиксированного размера буду использовать прямое копирование памяти там, где это возможно.
UPD: сделаноСпасибо, на b3584 данная проблема решилась. И обнаружился еще один сильнейший тормоз языка!
Демонстрация.
Профилировщик показывает причину.
Не совсем понимаю, зачем вообще CheckPointer вызывать в подобных ситуациях?
Однако, посмотрите на исходник демонстрации тормозов. Почему-то не происходит инлайна CheckPointer, как будто это не const-метод основного скопа.
Понятно, что данный тормоз языка обходится через прописывание везде сравнения указателей с NULL. Но хорошо бы понять, это серьезная недоработка компилятора или так и должно оставаться?
Если недоработка, прошу оперативно ее устранить!
Строка для поиска: Uluchshenie 060.Thanks, on b3584 this problem was solved. And another strong language brake was discovered!
Demonstration.
The profiler shows the reason.
I do not quite understand why CheckPointer should be called in such situations at all?
However, look at the brake demo source. For some reason, the CheckPointer inline does not occur, as if it were not a const method of the main scope.
It is clear that this language brake is bypassed by prescribing pointer comparisons with NULL everywhere. But it would be nice to understand if this is a serious compiler flaw or should it remain so?
If there is a problem, please fix it promptly!
Search string : Uluchshenie 060.Из пункта 7: https://www.mql5.com/ru/forum/425910
Из пункта 7: https://www.mql5.com/ru/forum/425910
Спасибо огромное!
Из пункта 7: https://www.mql5.com/ru/forum/425910
Действительно в несколько раз быстрее.
Только нужно быть внимательнее, CheckPointer еще проверяет, существует ли объект по указателю
Не забывать после удаления объекта присваивать указателю NULL, если он еще будет использоваться
Хорошо бы в редакторе скрывать последний вариант подсказки, если именно он уже введен.
Мешает редактированию следующей строки. Приходится перходить с клавиантурв на мышь и делать лишний клик, чтобы его скрыть. Если массово переименовываешь переменные, то отнимает много времени.
Добавлю : большие массивы переменных лучше править с конца, двигаясь к объявлению. А объявления править в последнюю очередь. В этом случае не будет подсказок.