Боролся с заголовком этого поста.Вот ссылка на некоторый код игровой площадки с проблемой:
https://play.rust -lang.org /? Version = stable & mode = debug & edition = 2018 & gist = 8282d8d5b5625d71b59a56f7271535fe
Ошибка Iполучаю:
error[E0271]: type mismatch resolving `<T as Dimensioned>::MetricT == std::boxed::Box<dyn Counter>`
--> src/lib.rs:18:27
|
18 | self.inner = Some(Box::new(metric))
| ^^^^^^^^^^^^^^^^ expected type parameter, found trait Counter
|
= note: expected type `std::boxed::Box<CT>`
found type `std::boxed::Box<dyn Counter>`
= note: required for the cast to the object type `dyn Dimensioned<MetricT = std::boxed::Box<dyn Counter>>`
Ошибка сборки имеет смысл для меня на поверхностном уровне, но, похоже, универсальный должен быть совместим со связанным типом.
Цель здесь будетиметь возможность иметь DimensionedGaugeDef
и DimensionedHistogramDef
.Обычно в этих структурах есть куча других вещей, которые не имеют отношения к проблеме.Я хочу убедиться, что эти структуры содержали Dimensioned
версии их соответствующих Metric
s, без необходимости иметь все признаки DimensionedCounter
, DimensionedGauge
и DimensionedHistogram
, все с определением with_dims
.
Я пытался получить with_dims
return Self
, но потом не могу создать объект-черту.