Rust: Принятие универсального в параметре функции в качестве связанного типа в признаке? - PullRequest
0 голосов
/ 21 сентября 2019

Боролся с заголовком этого поста.Вот ссылка на некоторый код игровой площадки с проблемой:

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, но потом не могу создать объект-черту.

...