rust 我可以为一个泛型类型实现一个泛型From< > trait吗?

pinkon5k  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(165)

我做了一个通用的Vector结构体,用于不同的T类型:

struct Vector<T> {
    data: [T; 3],
}

字符串
我已经为数学操作数实现了一些通用的trait(EqIndexstd::ops::Add ...),它工作得很好。
但是现在,我正在努力实现一个From trait,这样我就可以轻松地将Vector转换为Vector。

impl<T, U> From<Vector<U>> for Vector<T> {
    fn from(item: Vector<U>) -> Self {
        // [...]
    }
}


不管这个from函数的实现如何,我都会得到以下错误:

error[E0119]: conflicting implementations of trait `From<Vector<_>>` for type `Vector<_>`
 --> <source>:5:1
  |
5 | impl<T, U> From<Vector<U>> for Vector<T> {
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: conflicting implementation in crate `core`:
          - impl<T> From<T> for T;


如果我理解正确的话,这是因为默认情况下,对于任何类型,From<Vector<T>> for Vector<T>都已经声明了。如果TU是相同的类型,我的实现就会与之冲突。
那么有没有一种方法可以将我的实现用于任何不同类型的TU,而不用于相同类型的TU

13z8s7eq

13z8s7eq1#

您不能编写此实现。
即使你是From的所有者,你也不能写这个绑定,因为它与impl<T> From<T> for T冲突,其中T == U。事实上,有些人希望标准库为集合写这个impl(例如,Option<T>),尽管标准库是From的所有者,但它不能提供这个impl。
您可以提供一个方法来实现这一点,而不是trait实现。

相关问题