Исправление DarkEld3r, (текущая версия) :
Ну представь - ты работаешь в большом проекте, а он в логгере юзает библиотеку, в которой вот так модифицируют поведение через специализацию шаблонов.
Ты хочешь при помощи языка решить организационную проблему, это не работает. Никто не помешает какому-нибудь «индусу», никому не сказав, пропатчить саму библиотеку для логирования и точно так же всё поломать.
И самое забавное, что специализация тут вообще не при чём. Ведь автор темы хочет иметь просто две разных реализации для своего типа. Иметь одну ему никто не запрещает и её можно изменить, с таким же успехом поломав «скрипт, который парсит вывод».
поведение она изменять не должна.
Дык, гарантировать это нельзя. Да и разве в нашем случае поведение меняется? По прежнему выводится тип, а не, скажем, форматируется диск.
Опять же, при реализации вывода для своего типа, можно делать какие-то неожиданные вещи и язык тут ничего гарантировать не может. По крайней мере, Rust.
Ну и ничего, что в плюсах специализация есть (да ещё и с перегрузкой функций) и всё нормально?
Плюс сейчас в «базовой реализации» методы надо помечать как default, если мы хотим разрешить их специализировать. Что тоже даёт несколько больше контроля.
Исходная версия DarkEld3r, :
Ну представь - ты работаешь в большом проекте, а он в логгере юзает библиотеку, в которой вот так модифицируют поведение через специализацию шаблонов.
Ты хочешь при помощи языка решить организационную проблему, это не работает. Никто не помешает какому-нибудь «индусу», никому не сказав, пропатчить саму библиотеку для логирования и точно так же всё поломать.
И самое забавное, что специализация тут вообще не при чём. Ведь автор темы хочет иметь просто две разных реализации для своего типа. Иметь одну ему никто не запрещает и её можно изменить, с таким же успехом поломав «скрипт, который парсит вывод».
поведение она изменять не должна.
Дык, гарантировать это нельзя. Да и разве в нашем случае поведение меняется? По прежнему выводится тип, а не, скажем, форматируется диск.
Опять же, при реализации вывода для своего типа, можно делать какие-то неожиданные вещи и язык тут ничего гарантировать не может. По крайней мере, Rust.
Ну и ничего, что в плюсах специализация есть (да ещё и с перегрузкой функций) и всё нормально?