Введение в объекты трейта в Rust
Объект трейта хранит любое значение, которое этот трейт выполняет. Снаружи виден только набор методов из описания трейта, а не имя конкретной структуры. Так одну функцию можно применять к разным типам, если у каждого есть нужные методы.
Раньше параметр ограничивали записью с impl:
компилятор подставлял отдельный вариант функции
под каждый тип. Объект трейта выбирают, когда
важен один общий способ вызова во время работы
программы, а не отдельная копия кода на этапе
сборки.
Особенно это заметно, когда в одном месте нужно держать значения разных структур с одним трейтом: список участников, очередь обработчиков или набор подписчиков. Тогда тип контейнера описывают через объект трейта, а внутрь кладут то, что набор выполняет.
Дальше разберем параметр-объект у функции, хранение объекта в коробке, вектор значений разных типов с одним трейтом и то, какие сведения о типе при этом теряются.