Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения - страница 21
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ведь напрашивается просто перегрузка GetHashCode для нужного типа, а не начинать городить IEqualityComparable.
В таком случае концы уходят очень далеко, и возможная ошибка возникнет где-то в недрах библиотеки. И там думай-гадай, почему не найдена какая-то функция и чья это вина. А интерфейсы заранее гарантируют, что все необходимые функции уже определены в объекте.
В таком случае концы уходят очень далеко, и возможная ошибка возникает где-то в недрах библиотеки. И там думай-гадай, почему не найдена какая-то функция и чья это вина. А интерфейсы заранее гарантируют, что все необходимые функции уже определены в объекте.
Можете показать пример для MqlTick?
А интерфейсы заранее гарантируют, что все необходимые функции уже определены в объекте.
ага, вот только эти классы претендуют на звание универсальных и должны работать для всех типов с из коробки.
Можете показать пример для MqlTick?
Тут конечно издержки, что придётся помещать в класс, плюс проверка указателя.
Спасибо, но не получается понять, в чем преимущество такого подхода на деле?
В СБ такой код
Получается, что предложенные пляски только для того, чтобы не перегружать эту GetHashCode. Но стоит ли овчинка выделки в данном случае?
Спасибо, но не получается понять, в чем преимущество такого подхода на деле?
В СБ такой код
Получается, что предложенные пляски только для того, чтобы не перегружать эту GetHashCode. Но стоит ли овчинка выделки в данном случае?
Если критична скорость, то наверно лучше перегрузить.
Суть в том, что в .NET, откуда портировалась данная библиотека, все встроенные типы уже имеют интерфейсы изначально. Вот как определён int, он же Int32:
Поэтому там перегрузки и нет никакой.
И сам класс CKeyValuePair был бы объявлен чуть по другому.
Ну а тут пытаются всё это реализовать, насколько позволяют ограниченные возможности MQL. Хотя лучше бы потратили это время на улучшение функционала языка. Тогда бы потом достаточно было скопипастить всю .Net библиотеку, и всё бы работало.
Тут конечно издержки, что придётся помещать в класс, плюс проверка указателя.
а в чем проблема этот код запихать в перегрузку GetHashCode? тогда наследоваться от интерфейса не надо
Можно конечно. Но это осложняет контроль за процессом. Допустим у тебя куча разных GetHashCode, разбросанных по коду, и какой из них тут вызывается (и где он находится), может быть сложно понять. Например при вызове функции аргумент кастится к какому-то другому типу. В C# видимо поэтому возможности шаблонов урезаны по сравнению с C++
Можно конечно. Но это осложняет контроль за процессом.
нормально. в С++ этот интерфейс нафиг не нужен, нормальное взаимодействие достигается простой перегрузкой оператора <, Причем этот оператор может быть определен ВНЕ КЛАССА.
по-моему это гораздо проще и лаконичнее чем воротить такие конструкции. но нужна нативная поддержка перегрузки оператора < вне класса.
а для встроенных структур ничего кроме перегрузки GetHashCode не остается, т.к. заглушка ужасна, а отнаследовать нет возможности. наследование от структуры костыльное решение, потому что принуждает при пользовании стандартных функций вручную приводить структуру к пользовательскому наследнику, чтобы все пахало как задумано.наследование от структуры костыльное решение, потому что принуждает при пользовании стандартных функций вручную приводить структуру к пользовательскому наследнику, чтобы все пахало как задумано.
Видимо вы имеете ввиду не наследование, а обёртку из класса над структурой?
На самом деле такое "принуждение" - тоже недостаток функционала MQL, т.к. отсутствует возможность перегрузки оператора приведения. Иначе бы класс легко приводился к структуре неявно.
В общем язык надо дорабатывать и дорабатывать. Но чё-то никто не чешется... Уже 2 года застой в развитии, никаких улучшений и нововведений.
При том что сами же разработчики здесь сетуют на отсутствие множественных интерфейсов и прочих фишек, но продолжают есть кактус )