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

 
TheXpert:

dynamic cast для сравнения?? вы в своем уме?

Меня не заботит в данном случае время выполнение, определять тип можно и другими способами, например, виртуальной переопределяемой функцией. Код писался на коленке за 10 минут для того, чтобы показать принцип, и не является каким-либо рабочим вариантом

 
Ilya Malev:

А смысл в этом CBase? И почему должны сравниваться именно 2 значения одного типа?

Да, CBase здесь вообще не нужен.  У вас IComparer зачем-то наследуется от Number,  хотя это совершенно разные сущности.  Comparer - то не интерфейс для Number, это самостоятельный объект, которые принимает два числа.  Соответственно ваш Comparer должен быть просто IComparer<T1,T2> и без всякого Number и CBase
 
Ясно, очередной говнокодер с самомнением.
 
Самомнение - это как раз когда кто-то залезает в ветку, и начинает кидаться какашками. Очень важными какашками. Я просто написал товарищу (не Вам), с которым обсуждали тему шаблонов, как я вижу такую реализацию.
 
Ilya Malev:

Т.е. у вас смысловая ошибка.  Смешаны в кучу понятия Comparer и Comparable.  Первое - это сравниватель (самостоятельный класс).  А второй - это интерфейс для сравниваемого объекта (т.е. сравнивает this с другим объектом).  Вот его объект может наследовать

 
Alexey Navoykov:

Т.е. у вас смысловая ошибка.  Смешаны в кучу понятия Comparer и Comparable.  Первое - это сравниватель (самостоятельный класс).  А второй - это интерфейс для сравниваемого объекта (т.е. сравнивает this с другим объектом).

У меня как раз Number это по типу Comparable, а интерфейс по типу Comparer, причем они там в шарпе тоже как-то хитро связаны. Тут они работают друг через друга. Я же говорю что не было цели в точности скопировать ту конструкцию, которая там. Здесь цель - показать, как можно сделать интерфейс на основе шаблонов, который обязательно наследуется от одного из сравниваемых классов. Именно этот механизм я увидел у Вас и он мне понравился.

 
Alexey Navoykov:
У вас IComparer зачем-то наследуется от Number,  хотя это совершенно разные сущности. 

У меня Number тут по типу базового класса object, ну очень приблизительно я же не ставил целью на 100 строчках рабочую архитектуру представить. Но там все по любому от одного общего предка будет наследоваться

 
Ilya Malev:

Тут они работают друг через друга.

Но так не делается.  Нельзя разные сущности наследовать друг от друга.  Number может наследовать интерфейс IComparable, и он также может возвращать IComparer для своего типа отдельным методом.
 
Alexey Navoykov:
Но так не делается.  Нельзя разные сущности наследовать друг от друга.  Number может наследовать интерфейс IComparable, и он также может возвращать IComparer для своего типа отдельным методом.

Number это не число на самом деле, у него даже поля значения нет если Вы заметили. Просто так назвал... Ладно если что-то рабочее у меня в итоге получится тогда предложу это обсудить, а пока если совсем не подошел мой пример просто не берите в голову

 
Ilya Malev:

Number это не число на самом деле, у него даже поля значения нет если Вы заметили. Просто так назвал... Ладно если что-то рабочее у меня в итоге получится тогда предложу это обсудить, а пока если совсем не подошел мой пример просто не берите в голову

Ок.  Но над абстрактными методами вы всё-таки поразмыслите.  Без них всё выглядит очень ненадёжно.
Причина обращения: