Общая реализация черты From для общей структуры c - PullRequest
0 голосов
/ 07 февраля 2020

В Rust предположим, что у меня есть следующая структура:

struct Wrapper<T> {
    t: T,
}

Я хотел бы реализовать черту From, чтобы можно было конвертировать из Wrapper<T> в Wrapper<U> (всякий раз, когда преобразование из T до U поддерживается). Например, я хотел бы иметь преобразование из Wrapper<u16> в Wrapper<u32>.

Я пробовал это:

impl<T, U> From<Wrapper<T>> for Wrapper<U>
    where U: From<T>
{
    fn from(w: Wrapper<T>) -> Self {
        Self(w.t.into())
    }
}

Но это не с:

error[E0119]: conflicting implementations of trait `std::convert::From<Wrapper<_>>` for type `Wrapper<_>`:
...
   = note: conflicting implementation in crate `core`:
           - impl<T> std::convert::From<T> for T;

Я понимаю, почему я получаю ошибку, но мне интересно, есть ли способ добиться того, чего я хочу?

До сих пор я создал макрос и использовал его, чтобы обеспечить определенные c реализации для всех целочисленные примитивные типы, но я бы хотел, чтобы мое решение было более обобщенным c.

...