реализовать одну черту для нескольких типов Borrow <T>вызывает противоречивые реализации - PullRequest
0 голосов
/ 22 июня 2019
use std::borrow::Borrow;

trait Foo {
    fn bar();
}

struct S {}

impl <B: Borrow<S>> Foo for B {
    fn bar(){
        print!("bar");
    }
}

struct D {}

impl <B: Borrow<D>> Foo for B {
    fn bar(){
        print!("bar")
    }
}

fn main() {}

Код выше вызывает ошибку компилятора:

   Compiling playground v0.0.1 (/playground)
error[E0119]: conflicting implementations of trait `Foo`:
  --> src/main.rs:17:5
   |
9  |     impl <B: Borrow<S>> Foo for B {
   |     ----------------------------- first implementation here
...
17 |     impl <B: Borrow<D>> Foo for B {
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation

Я задал вопрос здесь Должен ли я реализовать черту дважды при ее реализации как для ссылочных, так и для нереферентных типов?

Принятый ответ хорошо работает, когда есть только одна структура, реализующая эту черту.

Как мне это сделать, если я хочу реализовать черту Foo для Borrow<S> и Borrow<D>?

...