Доброго времени суток!
Интересует вопрос: можно ли средствами MQL в результат функции возвратить массив?
double GetAttay(int input 1, int input 2 ... int input N){
double ArrayOutput[][2];
return (ArrayOutput);
}
Что нибудь похожее на это...
Нет, только так: void GetAttay(int input 1, int input 2 ... int input N, double &ArrayOutput[])
{........}
Можно, если обернуть массив в структуру, но при условии, что массив статический:
struct MyArray { double array[5][2]; }; MyArray GetArray() { MyArray funcStruct; return funcStruct; }
Хотя такой подход нельзя считать хорошим - происходит передача массива по значению. С массивами лучше использовать ссылки:
void GetArray(double &array[], double input1, ..., double inputN) { array[0] = input1; ... array[N - 1] = inputN; }
Можно, если обернуть массив в структуру, но при условии, что массив статический:
Хотя такой подход нельзя считать хорошим - происходит передача массива по значению. С массивами лучше использовать ссылки:
Нет, только так: void GetAttay(int input 1, int input 2 ... int input N, double &ArrayOutput[])
{........}
"на нет и суда нет") Спасибо.
Массив нельзя вернуть как результат функции c помощью return. Но можно предать по ссылке в качестве параметра функции массив.
Пример:
void arr(double &Array[]) { //тут заполняем массив Array[] данными for(i=0;i<=ArraySize(Array)-1;i++) Array[i]=i; } void OnTick() { double Arr[5]; arr(Arr); ... // for (i=0;i<=ArraySize(Arr)-1;i++) Print(Arr[i]); }
Массив нельзя вернуть как результат функции c помощью return. Но можно предать по ссылке в качестве параметра функции массив.
Пример:
Это я понял. И мне это вполне подойдет)
На мой взгляд, вобще передача функцией каких-то сложных объектов - плохая практика.
Единственное исключение - это функция-фабрика объектов. По сути, расширенный вариант оператора new. При этом надо помнить, что созданные объекты необходимо удалять после использования.
В случае массивов, как мне кажется, следует сперва массив создать, а потом отдельной функцей - заполнить его. При этом, как мне кажется, правильнее обернуть массив в класс (чаще всего - достаточно использовать готовые из стандартной библиотеки), а в функцию просто передавать указатель на созданный объект. Функция его заполняет, и возвращает признак ошибки (или ее отсутствия).
Статические переменные класса - по-моему, тоже следует применять с осторожностью. Главная область их применения - это значения или величины, нужные всем экземплярам класса.
На мой взгляд, вобще передача функцией каких-то сложных объектов - плохая практика.
Единственное исключение - это функция-фабрика объектов. По сути, расширенный вариант оператора new. При этом надо помнить, что созданные объекты необходимо удалять после использования.
В случае массивов, как мне кажется, следует сперва массив создать, а потом отдельной функцей - заполнить его. При этом, как мне кажется, правильнее обернуть массив в класс (чаще всего - достаточно использовать готовые из стандартной библиотеки), а в функцию просто передавать указатель на созданный объект. Функция его заполняет, и возвращает признак ошибки (или ее отсутствия).
Статические переменные класса - по-моему, тоже следует применять с осторожностью. Главная область их применения - это значения или величины, нужные всем экземплярам класса.
Уххх... Для непрограммиста это понять сложно) как прочитал мини-лекцию) а я думал массив это простой объект)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток!
Интересует вопрос: можно ли средствами MQL в результат функции возвратить массив?
double GetAttay(int input 1, int input 2 ... int input N){
double ArrayOutput[][2];
return (ArrayOutput);
}
Что нибудь похожее на это...