Кроме того, класс C имеет приоритет при выборе метода.
нет. нижняя функция должна выбираться потому что она более узкая специализация, а не потому что верхняя в _C. поменяйте функции местами в плюсах
нет. нижняя функция должна выбираться потому что она более узкая специализация, а не потому что верхняя в _C. поменяйте функции местами в плюсах
Поменял - появилась ошибка. Компилятор VS2010
да, ошибся, приоритет по классам влияет
но если обе функции в одном классе, компилится
получается сразу две ошибки?
получается сразу две ошибки?
template functions overloading is not supported yet
Alexey Navoykov:
А в родительский класс должно попадать только то, что не нашло соответствий в основном классе и требует приведения, насколько я знаю.
В с++ всё работает нормально.
В С++ работает потому что там действует фундаментальный принцип: изменения в базовом классе не должны влиять на поведение производного. В MQL этот принцип не работает по принципиальным соображениям (в родительский класс попадает все, кроме полного совпадения - в данном случае кроме A<B>&) .
Ремарка: перефразируя https://www.mql5.com/ru/forum/278274/page3#comment_8641454: назовите мне компилятор (кроме MQL) в котором этот принцип не действует
- 2018.09.10
- www.mql5.com
тогда объясните.
тогда объясните.
Вроде, уже объяснил. Если в с++ "что родилось, то уже родилось", то в MQL мутация генов родителя влечет соответствующее изменение генов уже рожденных детей.
Никак не соответствует генетике, но вполне имеет право на жизнь и даже интересненько...
Если я правильно понял исходный пост.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Следующий код демонстрирует неправильный выбор шаблонного метода компилятором. Переходит в метод _C::f(), пытаясь вызвать A<B>::X(), хотя в классе C определена более подходящая сигнатура A<T>, это явно точнее чем T. Кроме того, класс C имеет приоритет при выборе метода. А в родительский класс должно попадать только то, что не нашло соответствий в основном классе и требует приведения, насколько я знаю.
В с++ всё работает нормально.