Ошибки, баги, вопросы - страница 1733
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ссылка для массивов это костыль в языке MQL, а не ссылка.
А если [] это модификатор типа такой же как *, у него должен быть свой const! а не у ссылки.
Ошибка обоснована - эти идентификаторы в справке указаны как ReadOnly (не сочетаются с ChartSetInteger) https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property
может это поможет ?
Очень внимательно прочел. С++ много тяжелее воспринимается, чем MQL. Мало, что понял из статьи. И не понял совсем, как она касается обсуждаемого здесь.
Однако, понравилась такая возможность,
Совершенная передача(perfectforwarding)
Прежде чем описать что же это, такое вернемся к предыдущему стандарту и опишем существующую проблему. Предположим, у нас есть шаблонная функция foo принимающая один параметр, и передающая его функции bar(T& something):
void foo(T& Object)
{
bar(Object);
}
Итак, все хорошо. Но, что если мы захотим передать, скажем, число 100 в качестве аргумента функции?
Не беда, напишем так:
void foo(const T& Object)
{
bar(Object);//Ooops
}
Но в этом случае будет ошибка компиляции, т.к. bar принимает не константную ссылку. Значит надо предоставить 2 функции bar - константную и нет. А теперь представим, что у функции не один параметр а 2,3, или 5? Получается, что подобная задача очень трудна в реализации, т.к мы имеем (2^n - 1) перегруженных функций, где n - количество аргументов функции. Если вы думаете, что такое количество параметров является плохим стилем и вообще так никто не пишет, тогда обратите свой взор на std::bind, std::make_shared и т.д.
Теперь посмотрим, какое же решение нам предоставляет новый стандарт:
void foo(T&& Object)
{
bar(std::forward<T>(Object));
}
Используя вышеприведённый код проблема с передачей параметров полностью решается, это и называется совершенной передачей, т.к. тип аргумента сохраняется между вызовами внешней функции fooи внутренней функции bar. Больше нет нужды в перегрузке кучи функций - разработчики обобщенного кода могут быть довольны.
Это решение возможно благодаря тому, что если параметром шаблона является T&&, то переданный тип сохранит себя, а std::forward нужен затем, что любой именованный тип внутри функции foo превращается в lvalue, а нам нужен исходный тип - для этого и применяется std::forward он сохраняет исходный тип аргумента и лишает его имени(получается T&&), что позволяет в дальнейшем передать его в точности в функцию bar.
1455 - отладка на исторических данных (CTRL+F5) не работает. Появляется окно тестера, визуализация не запускается.
Очень внимательно прочел. С++ много тяжелее воспринимается, чем MQL. Мало, что понял из статьи. И не понял совсем, как она касается обсуждаемого здесь.
Однако, понравилась такая возможность,
"(2^n - 1) перегруженных функций, где n - количество аргументов функции" - с таким неудобством сталкивался в MQL.Это в тему о понимании rvalue / lvalue / prvalue / xvalue / gvalue, т.е. то о чем вы и говорили по сути на нескольких страницах :) Я так понимаю MQ пошли в ногу со стандартами С++, взяв оттуда на их взгляд наиболее ценное, не останавливаясь лишь на rvalue / lvalue.
Я так до конца сам еще и не осознал эти понятия, хотя логически посидеть понимаю :)
Кстати менеджер памяти в МТ5 работает непонятно как, если программа использует память по полной. На маленьких размерах не замерял.
К примеру у меня на виртуалке 4 гиг ОЗУ, 2 ядра, МТ5 v1455 х64.
Забиваю память объектами, в диспетчере задач видно, что память забита по 1,5 гига на терминал и 1,5 гига на виртуальную память. При этом MQL_MEMORY_USED показывает используемой памяти 400 мб. До старта было на терминал в районе 140 мб, на виртуалку в районе 150 мб.
Так же заметил, что как только используемая память переваливает за 400 мб, есть возможность, что менеджер памяти не освободит ее полностью, хотя объекты реально удаляются. А поведение отладчика тут не предсказуемо - доходим до удаления объектов, дожидаемся их полного удаления, после этого прекращаем отладку (по кнопке СТОП в отладчике), он останавливается, менеджер МТ5 память системе не отдал, т.е. там так и осталось висеть 1,5 гига на терминал и 1,5 гига на виртуальную память. А вот МТ5 сам отладку так и не завершил, хотя в МЕ показано, что отладка завершена. Если память объектами забиваю менее 400 мб, то все происходит нормально, кроме освобождения памяти.
Память освобождается только после удаления задачи терминала из списка запущенных задач.
Неправда. К тому же нет ни технических деталей, ни описание Ваших действий. Это специализированная ветка, в которой перед тем как написать о якобы найденной ошибке, нужно подготовиться и предоставить дополнительную информацию.
Разработчики по Сервисдеску уже запомнили мою конфигурацию несколько раз.
Беру любой из стандартных советников и в метаэдиторе нажимаю CTRL+F5. Выскакивает основное окно тестера с настройками, что заданы в метаэдиторе. Визуализация не запускается.
В логе
Разработчики по Сервисдеску уже запомнили мою конфигурацию несколько раз.
Вы даже не осознали о чём я сказал.
Что Вы делали перед тем как запустить отладку на истории? Вы настроили MetaEditor (вкладка "Сервис" - "Настройки" - "Отладка")? Приведите скриншот из MetaEditora (вкладка "Сервис" - "Настройки" - "Отладка"), что пишется в Тестере во вкладке "Журнал"? Что пишется в Визуализаторе во вкладке "Журнал"?
Разработчики по Сервисдеску уже запомнили мою конфигурацию несколько раз.
Беру любой из стандартных советников и в метаэдиторе нажимаю CTRL+F5. Выскакивает основное окно тестера с настройками, что заданы в метаэдиторе. Визуализация не запускается.