Как можно передать двумерный массив в функцию таким образом чтобы не указывать что он двумерный?
struct SD1{ int a[]; }; struct SD2{ int a[][2]; }; void OnStart(){ SD1 a1; SD2 a2; MoveArray(a1); MoveArray(a2); } template<typename T> void MoveArray(T & s){ Alert(ArrayDimension(s.a)); }
void OnStart(){ SD1 a1; SD2 a2; MoveArray(a1); MoveArray(a2); }struct SD1{Структуры можно объявить ниже после OnStart() int a[]; }; struct SD2{ int a[][2]; };template<typename T> void MoveArray(T & s){ s это что, на что ссылается s Alert(ArrayDimension(s.a)); }
Нашел.
"Структуры можно объявить ниже после OnStart()"
Ну и что? Можно и на ушах стоять и задом наперед ходить.
"s это что, на что ссылается s"
Может быть любой тип и самостоятельно созданный, в частности здесь структуры SD1 или SD2. В структуре может быть какой угодно массив. А так просто массив разной размерности не получится пропихнуть даже и через шаблон.
Но вы не неправильном пути. Писать шаблон, а потом в функции разруливать тип через if - это запредельная глупость.
Исходя из продемонстрированного вами опыта и понимания в программировании, не сможете вы написать что-то универсальное, что бы оно было действительно стоящим и имело смыл.
Я понял так, что вы решили перейти в отдельную тему...
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Seric29, 2019.03.16 18:36
Оно не динамическое, просто записывается так в качестве принимаемого аргумента просто ставятся квадратные скобки.
Шаблоны и такое проглатывают?
Для пользовательской функции, кажется во входных параметрах надо указывать размерность второго измерения.
Я понял так, что вы решили перейти в отдельную тему...
Шаблоны и такое проглатывают?
Для пользовательской функции, кажется во входных параметрах надо указывать размерность второго измерения.
Когда кажется, креститься надо.
Когда кажется, креститься надо.
Я понял так, что вы решили перейти в отдельную тему...
Шаблоны и такое проглатывают?
Для пользовательской функции, кажется во входных параметрах надо указывать размерность второго измерения.
Смысл не в том чтобы в скобочках указать второе измерение смысл в том чтобы в одной пользовательской функции можно была рассчитывать т.е. чтобы она одинаково принимала как двумерный массив так и одномерный. Я проверил пример который предоставил мне человек но ничего не получилось у меня.
struct SD1{ int a[]; }; struct SD2{ int a[][2]; }; void OnStart(){ SD1 a1; SD2 a2; MoveArray(a1); MoveArray(a2); } template<typename T> void MoveArray(T & s){ Alert(ArrayDimension(s.a)); }
Тут не понятно как функция MoveArray(a1);связывается с массивом структуры.В новую тему я не переходил я создал одновременно тему и задал вопрос там потому что в общих вопросах теряется мой вопрос и корректных ответов на него нет.
Я так понял что если вы привели пример объявили 2 структуры
struct SD1{ int a[];}; struct SD2{ int a[][2];};
Значит перед выводом функции вызывается структура, дальше нужно обратиться к их элементам этой структуры
struct SD2{int a[][2];}; здесь элементом структуры является int a[][2];
Дальше вы вызываете структуру и даёте ей часть имени a1(SD1 a1;), дальше вы вызываете функцию
MoveArray(a1);в скобках вы пишите а1 а как же обратиться к массивам этих структур int a[][2];или int a[];
не понятно к чему обращается эта функция она автоматически вызовет массив из структуры.
Также до сих пор не понятно что принимает функция T & s. Что такое s ссылка на что на переменную на какую на любую даже если это массив. Я записал так
int OnInit()здесь старт или тик перепутал. {SD1 a1; MoveArray(a1);return(INIT_SUCCEEDED); }
template<typename T> шаблон void MoveArray(T & a){ функция for(int cn=0; cn<=8; cn++) { тело функции которая будет двигать массив a[cn]=a[cn+1]; } } struct SD1{ структура 1ая int a[]; }; struct SD2{ структура 2ая int a[][2]; };
Выбивается ошибка
'[' - array required робот.mq4 1532 8
in template 'void MoveArray(T&)' specified with [T=SD1] робот.mq4 1529 6
'[' - array required робот.mq4 1532 14
Смысл не в том чтобы в скобочках указать второе измерение смысл в том чтобы в одной пользовательской функции можно была рассчитывать т.е. чтобы она одинаково принимала как двумерный массив так и одномерный. Я проверил пример который предоставил мне человек но ничего не получилось у меня.
Тут не понятно как функция MoveArray(a1);связывается с массивом структуры.В новую тему я не переходил я создал одновременно тему и задал вопрос там потому что в общих вопросах теряется мой вопрос и корректных ответов на него нет.
Именно в этом и есть смысл.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как можно передать двумерный массив в функцию таким образом чтобы не указывать что он двумерный?
Seric29, 2019.03.16 13:31
Есть идея сделать функцию сдвига массивов с технологиями определения типов (int, double и т.д) эту идею можно решить с помощью шаблонов
template<typename T, typename P> void MoveArray(T &array[],P &array1[][]) {}
а также хотелось бы применить технологию определения ранга массива, например чтобы не нужно было каждый раз писать что массив двумерный? Кто что посоветует: может это невозможно?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть идея сделать функцию сдвига массивов с технологиями определения типов (int, double и т.д) эту идею можно решить с помощью шаблонов
а также хотелось бы применить технологию определения ранга массива, например чтобы не нужно было каждый раз писать что массив двумерный? Кто что посоветует: может это невозможно?