Новая версия платформы MetaTrader 5 build 2265: Функции DirectX для 3D-визуализации в MQL5 и настройка инструментов в тестере стратегий - страница 9

 
Juan Fernandez:

Тогда, если компилятор не знает разницы между int и uint, это моя ошибка. Интересно, потому что это работает в MT4 и более старых сборках MT5

Компилятор становится все более требовательным к качеству кода и не позволяет программистам писать спорный код.
 
MetaQuotes Software Corp. : The compiler is becoming increasingly demanding on the quality of the code and does not allow programmers to write controversial code.

Я думаю, что вы не поняли код. Последний параметр (нулевое значение) не влияет на вызов. Когда я использую только 2 параметра, оставляя последний параметр со значением по умолчанию, вызов точно такой же, как когда я использую 3 параметра. Но когда я использую 2 параметра, компилятор не читает, какой тип значения возвращает метод Api ° Array :: size (uint). Тогда это явная ошибка ...

 
Juan Fernandez:

Я думаю, что вы не поняли код. Последний параметр (нулевое значение) не влияет на вызов. Когда я использую только 2 параметра, оставляя последний параметр со значением по умолчанию, вызов точно такой же, как когда я использую 3 параметра. Но когда я использую 2 параметра, компилятор не читает, какой тип значения возвращает метод Api ° Array :: size (uint). Тогда это явная ошибка ...

Это не ошибка, а правильная защита.

За такие множественные перегрузки надо бить по рукам, а за дополнительные дефолтные параметры в этом случае - еще и по ногам.

Компиляторы давно уже бьются за защищенное поведение и глубокий анализ, а не формальную совместимость.
 
MetaQuotes Software Corp. :

This is not a mistake, but the right protection.

For such multiple overloads, one must beat on the hands, and for additional default parameters in this case - also on the legs.

Хорошо. очевидно, компилятор тупой. Он не может выбрать правильный перегруженный метод, даже зная, какие типы используются. Только можно вызвать 3 метода. Один с uchar, один с int и один с uint. Я выбираю uint в качестве второго параметра, но компилятор не знает, какой метод я хочу использовать. Вопрос в том, кто защищает кодеров от тупых компиляторов. Но это нормально. Я достаточно много лет работаю в metatrader, чтобы знать, что ты хочешь сказать мне своим ответом. Все равно спасибо

 
Juan Fernandez:

Хорошо. очевидно, компилятор тупой. Он не может выбрать правильный перегруженный метод, даже зная, какие типы используются. Только можно вызвать 3 метода. Один с uchar, один с int и один с uint. Я выбираю uint в качестве второго параметра, но компилятор не знает, какой метод я хочу использовать. Вопрос в том, кто защищает кодеров от тупых компиляторов. Но это нормально. Я достаточно много лет работаю в metatrader, чтобы знать, что ты хочешь сказать мне своим ответом. Все равно спасибо

У Вас на скриншотах видно, что сообщений о результатах компиляций много, нам показана малая часть.

Не показано, какого типа функция Api ° Array :: size

Компилятор явно не смог выбрать из двух "походящих" перегрузок (первую и вторую или третью), но вот в лог вывел сообщения обо всех трёх, чтобы программист был внимательнее и не пропустил ни одной из потенциально возможных.

 
Ilyas :

You can see in the screenshots that there are a lot of messages about the compilation results, a small part is shown to us.

Not shown what type of function Api ° Array :: size

The compiler obviously could not choose from two “suitable” overloads (the first and second or third), but it sent messages about all three to the log so that the programmer was more attentive and did not miss any of the potential ones.

Это правда, я не показываю, какой тип возвращает, но не имеет значения, поскольку метод invoke с 2 или 3 параметрами абсолютно одинаков. Если вызов метода с 3 параметрами работает, он должен работать, когда я использую 2 параметра, потому что последний параметр всегда одинаков (ноль).

Звонок захвата "T &, UINT, UINT". Когда я использую 2 параметра вызова, я использую "T &, UINT". С 2 параметрами у меня есть только один метод (T &, uchar). Но у меня есть 2 метода с 3 параметрами. Поскольку последний параметр является значением по умолчанию, он работает как "T &, int" и "T &, uint", когда я использую 2 параметра. Почему раньше компилятор знал это, а теперь не видит? Мы говорим, что-то всегда работало. Теперь выглядит компилятор менее продвинутым. Я не понимаю эту регрессию в возможностях

 

Подскажите, а по стандартной библиотеке будут исправления?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2265: Функции DirectX для 3D-визуализации в MQL5 и настройка инструментов в тестере стратегий

Vasiliy Pushkaryov, 2019.12.03 18:40

Хорошо бы стандартную библиотеку допилили. Билд 2248, кнопки при быстрых нажатиях так и продолжают залипать.

Хотя если не пользоваться СБ, то кнопки работаю очень быстро. Планируется ли дорабатка СБ ?


Вот без СБ



Файлы:
 
Vasiliy Pushkaryov:

Подскажите, а по стандартной библиотеке будут исправления?

Будут в следующем релизе, не успели.
 

Посмотрите на новые возможности 3D графики с примерами в релизе 2265:

  • /include/canvas - масса функций для DirectX
  • /experts/examples/Correlation Matrix 3D
  • /experts/examples/Math 3D Morph
  • /scripts/examples/Remnant 3D

И набор функций для работы с SQLite базами данных.

Документация по MQL5: Работа с базами данных
Документация по MQL5: Работа с базами данных
  • www.mql5.com
Важной особенностью данного движка является то, что вся база данных находится в единственном стандартном файле, который находится на компьютере пользователя. Простота реализации достигается за счёт того, что перед началом исполнения транзакции записи файл, содержащий базу данных, блокируется. При этом...
 
Renat Fatkhullin:
Будут в следующем релизе, не успели.
Спасибо
Причина обращения: