Новая версия платформы MetaTrader 5 build 2085: Интеграция с Python и массовые улучшения в тестере стратегий - страница 25

 

По поводу инициализации массивов.  Давно пора бы сделать возможность инициализировать их любыми значениями, а не только константами.  Это бы значительно упростило коды.

void f(int a, int b, int c)
{
  int arr[] = { a, b, c };  // 'a' - constant expression required
}

Кроме того, необходима возможность инициализации одного массива другим:

const int arr2[]= arr;


Особенно если массив является членом класса:

struct A
{
  const int arr[3];

  A(int a, int b, int c) : ??? Как нам инициализировать массив arr?
  A(const A&) :            ???
};
 
Alexey Navoykov:

О чём вы? Какую концепцию классов, какие частные случаи?  Неявный конструктор копирования - это обычный функционал C++.  Точно так же как и неявный оператор присваивания, который разработчики перенесли в MQL (а вот про конструктор забыли).   Поэтому с тем же успехом вы должны говорить и про оператор - мол "ни в коем случае нельзя это делать, если нужен оператор...бла-бла-бла", хотя это уже есть в MQL.

Ну и повторюсь, конструктор копирования гораздо более важная вещь, чем оператор. По сути, если класс разрешает себя копировать через оператор, значит он априори разрешает и конструктор.  А вот обратное не верно.  Т.е. конструктор может быть практически у любого класса, а вот оператор - только у некоторых.  Поэтому коль даже оператор создаётся по умолчанию, то конструктор и подавно должен создаваться.

Это из серии бла бла бла, вам трудно написать несколько строк в класс и вы хотите все что бы было как в С++, но так не будет по многим причинам

 
Alexey Navoykov:

По поводу инициализации массивов.  Давно пора бы сделать возможность инициализировать их любыми значениями, а не только константами.  Это бы значительно упростило коды.

Кроме того, необходима возможность инициализации одного массива другим:


Особенно если массив является членом класса:

вам религия что ли не позволяет сделать так ?

void f(const int a,const int b,const int c)
{
  int arr[] = { a, b, c };  // 'a' - constant expression required
}
 
Konstantin:

вам религия что ли не позволяет сделать так ?

И что от этого изменится?  Попробуйте сами для начала.
 
Alexey Navoykov:
И что от этого изменится?  Попробуйте сами для начала.

прошу прощения, действительно ))) но вообще на мой взгляд это лишнее либо пример взят с потолка, если передаете в функцию значения массива, не проще ли эти значения передавать самим массивом, а то что вы пишите по идее уходит в плоскость кортежей и тут я согласен с вами, они нужны так же как и их декомпозиция

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

 
Konstantin:

прошу прощения, действительно ))) но вообще на мой взгляд это лишнее либо пример взят с потолка, если передаете в функцию значения массива, не проще ли эти значения передавать самим массивом, а то что вы пишите по идее уходит в плоскость кортежей и тут я согласен с вами, они нужны так же как и их декомпозиция

Данное удобство является обыденной вещью в C/C++, поэтому говорить о каких-либо плоскостях тут излишне.  Инициализировать массив в одну строчку, либо городить портянку их туевой хучи строк, увеличивая вероятность ошибки - выбор вроде очевиден.  А для константных массивов это вообще единственно возможный вариант.

Почему такая банальная вещь до сих пор не реализована в MQL - загадка.   А передача в функцию тут вообще ни при чём, это был просто один из примеров формирования массива.

 
Alexey Navoykov:

Почему такая банальная вещь до сих пор не реализована в MQL - загадка. 

скорее всего время на реализацию нужно, когда появился МТ5, в нем было ООП, но такое кастрированное.... я даже админа спрашивал, дайте хотя бы перегрузку операций - зачем ООП которое не ООП ни в одном месте.... в ответ не планируем... потом не быстро, но и перегрузка появилась

ЗЫ: множественное наследование добавить бы, сижу в раздумьях есть исходник на C# про нечеткую логику, но там в виде наследования множественных интерфейсов класс сделан - если это тянуть в MQL5, то будет опять игра с метко разбросанными граблями ))))

 

StructToTime

Производит конвертацию из переменной типа структуры MqlDateTime в значение типа datetime и возвращает полученное значение.

datetime  StructToTime(
   MqlDateTime&  dt_struct      // структура даты и времени
   );

Параметры

dt_struct

[in]  Переменная структуры типа MqlDateTime.

Почему аргумент функции не константный?  Функция изменяет его?
 
Alexey Navoykov:
Почему аргумент функции не константный?  Функция изменяет его?

Где Вы возьмёте константный объект этой самой структуры для передачи в качестве параметра?

 
Slava:

Где Вы возьмёте константный объект этой самой структуры для передачи в качестве параметра?

Странный вопрос, однако.

// Пример 1 void foo(const MqlDateTime &time) { Print(StructToTime(time)); } // Пример 2 class A {   MqlDateTime _time; public:   A(const MqlDateTime &obj) { _time=obj; }   datetime to_datetime() const { return StructToTime(_time); } }; // Пример 3 const MqlDateTime time= { 2019, 7, 25 };