Скачать MetaTrader 5

Как передать ссылки на массивы функции?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Скачай документацию одним файлом. Это просто!
Evgeny Potapov
1632
Evgeny Potapov 2015.08.05 06:10 

Здравствуйте!

Индикатор получает на входе стандартный набор аргументов:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

Ещё в индикаторе есть класс, который содержит много функций ~20, которые вызывают друг друга последовательно: одна функция вызывает следующую итд.

Только последняя функция работает с аргументами переданными в

OnCalculate

Как можно передать ей эти аргументы чтобы не тащить их через все вызовы функций?

(Не хочется раздувать объём кода в несколько раз)

Dmitry Fedoseev
42924
Dmitry Fedoseev 2015.08.05 07:05  
Никак. Тащить за собой надо.
George Merts
3612
George Merts 2015.08.05 07:16  

Меня уже давно раздражет отсутствие указателей на массивы.

Ну, свой массив можно обернуть в класс. Но массивы, переданные в OnCalculate() - в класс не обернешь. Приходится либо "тащить через все вызовы функций", либо на входе копировать себе, и потом пользоваться указателем на класс...

Я уже предлагал - если никак нельзя ввести указатели на массив, надо ввести функцию OnCalculate(), которая бы получала указатели на классы таймсерий из Стандартной Библиотеки. Чтобы эти указатели можно было сохранить, и потом использовать, не передавая весь массив.

Evgeny Potapov
1632
Evgeny Potapov 2015.08.09 16:48  
George Merts:

Меня уже давно раздражет отсутствие указателей на массивы.

Ну, свой массив можно обернуть в класс. Но массивы, переданные в OnCalculate() - в класс не обернешь. Приходится либо "тащить через все вызовы функций", либо на входе копировать себе, и потом пользоваться указателем на класс...

Я уже предлагал - если никак нельзя ввести указатели на массив, надо ввести функцию OnCalculate(), которая бы получала указатели на классы таймсерий из Стандартной Библиотеки. Чтобы эти указатели можно было сохранить, и потом использовать, не передавая весь массив.

Спасибо!

Понятно, я просто не мог себе поверить, что этот а-ля MQL5 компилятор так бестолково спроектирован!

Присоединяюсь к вашей идее насчёт библиотеки, и мне кажется, что можно ещё иначе сделать:

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

а это уже не так противно и не придётся столько плеваться!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий