Передача массива структур в функцию

 

Приветствую всех.

В mql5/mql4 есть возможность передавать массивы по ссылке в функцию в качестве параметров, например:

int SizeArr(int &arr[])
{
   int size = ArraySize(arr);
   return(size)
}

Так вот вопрос - есть массив структур

struct MyST
{
   int i;
   double d;
   datetime t;
};
MyST st[];

есть ли такая же возможность передавать массив структур в функцию , по аналогии с массивами?

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

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

 
В чем проблема? почему не попробовали передать?
 
Структура это всего-лишь пользовательский тип данных. Соответственно массив структур ничто иное как массив пользовательского типа.
 

Так и пишите

int SizeArr(MyST &arr[])
{
   int size = ArraySize(arr);
   return(size)
}
 
Alexey Valeev:

Так и пишите

Такой вариант подходит когда есть 1 массив структур , а если их например 3 , и каждый нужно передать в одну и туже функцию. Вот пример:

#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

struct MyST_1
{
   int i_1;
   double d_1;
   datetime t_1;
};
MyST_1 st_1[10];
//---
struct MyST_2
{
   int i_2;
   double d_2;
   datetime t_2;
};
MyST_2 st_2[10];
//---
struct MyST_3
{
   int i_3;
   double d_3;
   datetime t_3;
};
MyST_3 st_3[10];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);
      
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   Comment("");   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
   Comment(SizeArr(st_1));
   
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int SizeArr(MyST_1 &arr[])
{
   int size = ArraySize(arr);
   return(size);
}

Здесь передаётся st_1  , а как передать st_2  и  st_3 ? Писать функции  SizeArr_2(MyST_2 &arr[]) и  SizeArr_3(MyST_3 &arr[]) ?  Хотелось бы обойтись одной функцией.

 
Galina Bobro:
В чем проблема? почему не попробовали передать?

Познаний моих видимо не хватает , а примера в справке не нашёл , вот и спросил здесь ))

 

Так судя по коду они у вас одинаковые? Если так то делайте так и нет проблем.

struct MyST
{
   int i_1;
   double d_1;
   datetime t_1;
};

MyST st1[10],st2[10],st3[10];

int SizeArr(MyST &arr[])
{
   int size = ArraySize(arr);
   return(size)
}

Либо если разные, то так

template <typename T>
int SizeArr(T &arr[])
{
  int size=ArraySize(arr);
  return(size)
}
 
Alexey Valeev:

Так судя по коду они у вас одинаковые? Если так то делайте так и нет проблем.

Либо если разные, то так

Блин как всё просто оказывается )  Мне Оба Ваши варианта интересны , буду пробовать...

Большое Вам человеческое Спасибо!

 
Sergey Kolemanov:

Блин как всё просто оказывается )  Мне Оба Ваши варианта интересны , буду пробовать...

Большое Вам человеческое Спасибо!

Пожалуйста, сам раньше на данном форуме много вопросов задавал)

 
Тоже искал такой пример. Напишите пожалуйста, как теперь внутри функции обратиться к любому элементу структуры любого массива? Спасибо большое!
Причина обращения: