LINUX.ORG.RU

История изменений

Исправление DarkEld3r, (текущая версия) :

Ну представь - ты работаешь в большом проекте, а он в логгере юзает библиотеку, в которой вот так модифицируют поведение через специализацию шаблонов.

Ты хочешь при помощи языка решить организационную проблему, это не работает. Никто не помешает какому-нибудь «индусу», никому не сказав, пропатчить саму библиотеку для логирования и точно так же всё поломать.

И самое забавное, что специализация тут вообще не при чём. Ведь автор темы хочет иметь просто две разных реализации для своего типа. Иметь одну ему никто не запрещает и её можно изменить, с таким же успехом поломав «скрипт, который парсит вывод».

поведение она изменять не должна.

Дык, гарантировать это нельзя. Да и разве в нашем случае поведение меняется? По прежнему выводится тип, а не, скажем, форматируется диск.

Опять же, при реализации вывода для своего типа, можно делать какие-то неожиданные вещи и язык тут ничего гарантировать не может. По крайней мере, Rust.

Ну и ничего, что в плюсах специализация есть (да ещё и с перегрузкой функций) и всё нормально?

Плюс сейчас в «базовой реализации» методы надо помечать как default, если мы хотим разрешить их специализировать. Что тоже даёт несколько больше контроля.

Исходная версия DarkEld3r, :

Ну представь - ты работаешь в большом проекте, а он в логгере юзает библиотеку, в которой вот так модифицируют поведение через специализацию шаблонов.

Ты хочешь при помощи языка решить организационную проблему, это не работает. Никто не помешает какому-нибудь «индусу», никому не сказав, пропатчить саму библиотеку для логирования и точно так же всё поломать.

И самое забавное, что специализация тут вообще не при чём. Ведь автор темы хочет иметь просто две разных реализации для своего типа. Иметь одну ему никто не запрещает и её можно изменить, с таким же успехом поломав «скрипт, который парсит вывод».

поведение она изменять не должна.

Дык, гарантировать это нельзя. Да и разве в нашем случае поведение меняется? По прежнему выводится тип, а не, скажем, форматируется диск.

Опять же, при реализации вывода для своего типа, можно делать какие-то неожиданные вещи и язык тут ничего гарантировать не может. По крайней мере, Rust.

Ну и ничего, что в плюсах специализация есть (да ещё и с перегрузкой функций) и всё нормально?