В общем из-за этих багов не получается реализовать такую конструкцию
template<typename T> interface ISome { }; template<typename T> void f(T const& arr[], ISome<T>&) { }
чтобы f могла принимать любые типы, включая указатели.
Если сделать перегрузку шаблона для указателей:
template<typename T> void f(T* const& arr[], ISome<T*>&) { }
то это не работает, компилятор выдаёт ошибку при попытке передачи массива указателей. Он вообще не понимает такую конструкцию шаблонного аргмента: ISome<T*>& - ранее об этом баге я тоже сообщал.
Печально, что из-за багов в MQL до сих пор невозможна полноценная работа с шаблонами.
А в чём необходимость использовать interface, почему нельзя обойтись абстрактным классом? Зачем его вообще ввели?
Да хоть класс, хоть интерфейс, на баги это не влияет.
Ну так то да. Просто интересно - ведь должна же быть какая-то последовательность в действиях, назвались плюсовым аналогом, зачем тогда интерфейсы пихать? Какую проблему они решают да так красиво, что абстрактные классы курят в сторонке? А то можно и от лиспа, например, чего-нибудь впаять:
(setq-default indent-tabs-mode nil) (global-set-key (kbd "<up>") (lambda () (interactive) (scroll-down-command 1))) (global-set-key (kbd "<down>") (lambda () (interactive) (scroll-up-command 1)))
"Родила царица в ночь не то сына, не то дочь ..."
Просто я был немного в шоке после просмотра https://www.mql5.com/ru/docs/standardlibrary/generic/icollection. Так использовать и не стал.

- www.mql5.com
зачем тогда интерфейсы пихать?
потому что множественное наследования хотят, а полноценное запилить слабо, поэтому делают, как в шарпе, интерфейсы.
но еще не доделали.
Продолжаем тему багов:
template<typename T> void f(T&) { } // '*' - pointer cannot be used template<typename T> void f(T*&) { } void OnInit() { int b; f<int>(b); // 'f<int>' - ambiguous call to overloaded function with the same parameters }
А без явной типизации работает нормально.
Там вообще чудеса всякие творятся при явной типизации.
Продолжаем тему багов:
А без явной типизации работает нормально.
Там вообще чудеса всякие творятся при явной типизации.
Ну это древний баг почившего Сервисдеска.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Билд 1966, 64 бит. Компилятор некорректно воспринимает шаблон, заданный в такой форме:
В такие шаблоны невозможно передать указатели, ни в каком виде:
А в некоторых из этих случаев возникает ещё и ошибка 'const' - unexpected token в самом шаблоне.
Хотя этот шаблон равносилен:
В таком написании всё компилируется. НО! Тогда возникает другая ошибка:
Т.е. при попадании в такой шаблон указатель меняет тип - становится константным указателем. Хотя const в шаблоне относится лишь к константности переменной.