Здравствуйте, sergii.p, Вы писали:
SP>задача: есть некие индикаторы, которые можно рассчитать. Но каждый индикатор может вернуть также разнородные данные. От этих данных требуется, чтобы они поддерживали только std::fmt::Display. Например, имя человека и его термпература (разные методы расчёта, разные возвращаемые типы).
SP>Надо это всё засунуть в вектор.
SP>SP>trait Indicator {
SP> type Type: std::fmt::Display; // возвращаемый тип
SP> fn calc(&self) -> Box<Self::Type>; // функция для расчёта. Хотелось бы возвращать не Box, но вроде это невозможно
SP>}
SP>
SP>Текущая проблема — не компилируется. Не понимаю как описать тип вектора.
SP>https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=431cf11e95deba8ebd60740b1764d791
dyn в расте не обладает вариантностью. То есть если T1: T2, то dyn T1 никак не связан с dyn T2
Поэтому надо от типа внутри трейта избавится и возвращать из calc просто Box<dyn Display>