ООП, шаблоны и макросы в mql5, тонкости и приёмы использования - страница 5

 
pavlick_:

Насчёт многопроходности - поторопился, наивно думал, что мкл разрешит это

Так здесь переменные. А вот с функциями - да, многопроходно получается, так что всё верно было сказано.  Проблема же возникает именно из-за порядка инициализации функций.  Короче, в C++ единый строгий порядок, относящийся и переменным, и функциям, и к типам.  А в MQL всё вразнобой.
 
Alexey Navoykov:
Ну вот я с этого и начинал разговор тут. Планировал тоже заменять все статики на глобалы (хоть это и жесть конечно).  Но как показано выше, с шаблонами такое не прокатит.  С макросами тоже.  А я всё это широко применяю.  Поэтому и сделал свою реализацию.  Хотя она конечно не решает всех проблем.  Динамические массивы по-прежнему нельзя инициализировать, константные типы тоже.  Поэтому их однозначно придётся выносить на глобальный уровень

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

 
Alexey Navoykov:
Так здесь переменные. А вот с функциями - да, многопроходно получается, так что всё верно было сказано.  Проблема же возникает именно из-за порядка инициализации функций.  Короче, в C++ единый строгий порядок, относящийся и переменным, и функциям, и к типам.  А в MQL всё вразнобой.

Многопроходность это плохо в любом случае - нарваться на рекурсию, deadlock и т.п. Но ведь в плюсах можно forward declaration сделать. Поэтому только с умом, осторожно (явнями forward declaration), и не так как сейчас у многопроходного компилятора - будто для любой функции сделана forward declaration, рано или поздно эти грабли ударят по лбу.

 
pavlick_:

Многопроходность это плохо в любом случае - нарваться на рекурсию, deadlock и т.п. Но ведь в плюсах можно forward declaration сделать. Поэтому только с умом, осторожно, и не так как сейчас у многопроходного компилятора - будто для любой функции сделана forward declaration, рано или поздно эти грабли ударят по лбу.

Согласен. Чуть ранее эту тему как-раз обсуждали. Здесь многим именно это нравится в языке, что можно на заморачиваться с порядком объявления функций.  Да чего греха таить, меня и самого когда-то радовало это )  А в плюсах раздражала его занудность.  Но с опытом приходит понимание.

 
Ilya Malev:

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

Соглашусь, если всё чётко выстроено в ООП, тогда не только свободные функции не нужны, но и шаблонные методы тоже.  Да только здесь мы имеем дело с недоразвитым гибридом между C++ и C#.  Поэтому очень многое приходится реализовывать через костыли )
 
Alexey Navoykov:
Соглашусь, если всё чётко выстроено в ООП, тогда не только свободные функции не нужны, но и шаблонные методы тоже.

Шаблонные методы нужны везде, где не хочется писать кучу повторяющегося кода, хоть ООП хоть не ООП. Свободные функции это другое дело - это уже разные стили программирования.

 
Ilya Malev:

Шаблонные методы нужны везде, где не хочется писать кучу повторяющегося кода, хоть ООП хоть не ООП

В ООП для этого придуманы интерфейсы.
 
Alexey Navoykov:
В ООП для этого придуманы интерфейсы.

Интерфейсы все таки немного для другого. Если я хочу, чтобы у меня 1 и тот же код выполнял одинаковую работу с разными типами в зависимости от класса параметра (без объявления доп классов), интерфейс не поможет.

 
Ilya Malev:

Интерфейсы все таки немного для другого. Если я хочу, чтобы у меня 1 и тот же код выполнял одинаковую работу с разными типами в зависимости от класса параметра (без объявления доп классов), интерфейс не поможет.

Если параметры разных типов, то логично сделать несколько перегруженных методов с соответствующими типами.  Вам же всё-равно придётся их в функции как-то разделять.  Так лучше разбить на отдельные функции, чем городить портянку, которая к тому же принимает безликий тип, т.е. можно по ошибке передать в неё всё что угодно и получить ошибку компиляции внутри библиотеки, что не есть гуд.  А может даже и не получить, что не гуд вдвойне )

Короче, в полноценном ООП шаблонные функции - это костыль (за редким исключением)

 
Alexey Navoykov:


Короче, в полноценном ООП шаблонные функции - это костыль.

Вот и приехали

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

Alexey Navoykov, 2019.01.25 10:11

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