- Простой пример с объектом и параметрами
- Прощаи робот-да здравствует маразм
- Передача указателя через параметры
Возможно, у кого-то возникала такая проблема, когда один и от же фрагмент кода нужно копировать много раз в различные места функции. Но если одинаковых фрагментов становится слишком много, то становится очень сложно за ними уследить. Делаем изменение в одном фрагменте и тут же, надо искать все идентичные фрагменты и делать там это же изменение много раз. Конечно, можно воспользоваться автозаменой текста. Но всё же, есть способ на много эффективнее, заключить повторяющийся фрагмент в функцию и всталять её сколько угодно раз, там где это необходимо. Но проблема кроется здесь вот в чём. Во первых, вызываемая функция не видит локальных переменных вызывающей её функции. Во вторых, указатели на объекты в параметрах работают только для чтения, но не для записи (следовательно, нельзя передать объекты из вызываемой функцию посредством параметров). По данной проблеме у меня даже есть тема с примером: https://www.mql5.com/ru/forum/227475 . Таким образом, если локальные переменные передать через параметры по адресу, то объекты передать не получится. Кто как выходит из подобных ситуаций, с многократным повторением одних и тех же фрагментов кода?
Заверните повторяющийся участок в макрос.
Заверните повторяющийся участок в макрос.
В Метаредакторе вроде нет такого...
В Метаредакторе вроде нет такого...
Тогда в функцию.)
Тогда в функцию.)
В функцию нельзя по причине вышеизложенного!
В функцию нельзя по причине вышеизложенного!
В класс. А переменные сделать переменными класса, приват, например.
Кстати, в функции возможно определить вложенную функцию, тогда переменные будут видны. Поодержит ли это MQL? - не знаю, не приходилось.
В Метаредакторе вроде нет такого...
есть
А есть ли конкретные примеры, как это сделать в Метаредакторе? Нашел пример на C++ https://habrahabr.ru/post/149513/, но там только вывод строки на экран. А мне нужна передача данных из функции, включая объекты, которых может быть несколько. И еще один важный момент, будут ли макросы компилироваться в ex5 как включаемые файлы mqh, например?
С классами внутри функции выходит следующее:
void func_1(){ int a = 1, b = 2, c = 3; class CLocalFunc{ public: void lc_f_1(){ c -= b; } void lc_f_2(){ c -= a; } }; CLocalFunc Local; Local.lc_f_1(); Local.lc_f_2(); }
В результате:
'c' - undeclared identifier
'b' - undeclared identifier
Вроде и можно реализовать локальный класс внутри функции, но, к сожалению, он не видит её переменных.
С классами внутри функции выходит следующее:
В результате:
'c' - undeclared identifier
'b' - undeclared identifier
Вроде и можно реализовать локальный класс внутри функции, но, к сожалению, он не видит её переменных.
Не, саму функцию в класс запихнуть, а многократно-повторяющиеся сделать функцией класса, тогда эта функция будет видеть все переменные.
Про вложенную функцию (она тоже видит все переменные) уже писал.
Начните с наглядного примера проблемы, если тема не для просто поболтать
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования