Можно ли определить тип переменной или элемента в mql4? - страница 3

 
Ihor Herasko:


А если у меня функция принимает несколько массивов насколько корректной будет такая запись?

void MoveArray(T &array[],T &array1[],T &array2[])сможет ли определить тип каждого массива или речь идёт о работе только с одним элементом?
{
Расчёты
}

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

 
Seric29:

А если у меня функция принимает несколько массивов насколько корректной будет такая запись?

Это только для случая, когда у всех массивов один и тот же тип.

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

Если у массивов разные типы, то нужно описать эти типы:

template<typename T, typename P, typename N>
void MoveArray(T &array[], P &array1[], N &array2[])
{
   // do something
}

При этом допускается, что все три типа могут быть одинаковыми.

 
Seric29:

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

а Вы хоть один из предложенных Вам примеров проверяли?

typename(T) - вернет Вам тип переменной (массива), ну и делайте дальше анализ через if(typename(T) == "double") Print("Ура! это дубле!!")

 
Seric29:

А если у меня функция принимает несколько массивов насколько корректной будет такая запись?

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

Вам перегрузка нужна, а не шаблон.

...хотя мнение тут разделилось - кто-то советует перегрузку, кто-то шаблон.

Если шаблон, то для нескольких массивов так:

template<typename T1,typename T2>
void MoveArray(T1 &array[],T2 &array[])
{

}

Но кто знает, может массивов несколько, но типы у них одинаковые (при одном вызове функции).

Но как-то это не того - писать шаблон, а потом в шаблонной функции разруливать типы. Тут надо перегрузкой пользоваться.

 
Ihor Herasko:

Это только для случая, когда у всех массивов один и тот же тип.

Если у массивов разные типы, то нужно описать эти типы:

Уже немного понятно значит нужно сделать первое создать шаблон делается это вот так

template<typename T, typename P, typename N> создаём шаблон у которого есть несколько параметров<typename T, typename P, typename N>

Дальше описываем функцию

void MoveArray(T &array[], P &array1[], N &array2[]){тело функции}

Дальше я так понимаю нужно шаблон расписать или уже шаблон расписывать не нужно, что он такое т.е ниже или сразу по создании шаблона под ним описываем там что нам нужно выглядит это так 

template<typename T, typename P, typename N>
расписываем шаблон в этом месте
void MoveArray(T &array[], P &array1[], N &array2[])дальше пользуемся функцией и применяем технологию 
{}

Так это делается а для чего структура что в начале темы была от вас? Как происходит описание шаблона учитывая то что типы разные?

struct MyStruct
{
};

double doubleArray[];
int intArray[];
datetime dtArray[];
MyStruct stArray[];

И вот что-то 

struct MyStruct
{
   datetime dtTime;
   double   fPrice;
};

   int intArray[];
   double dArray[];
   MyStruct stArray[];

И ещё описывать это всё я буду не в OnStart или в OnTick а за ними.

Причина обращения: