![](/img/trans.png)
[英]Why doesn't my implementation of TryFrom<Vec<T>> cover TryFrom<Vec<String>>?
[英]Unexpected conflicting implementation for TryFrom
我想在这样的情况下实现特征TryFrom
:
struct T1;
struct T2(T1);
impl<U> TryFrom<U> for T2 where U: Into<T1> {
type Error = ();
fn try_from(val:U) -> Result<T2, Self::Error> {
unimplemented!();
}
}
这给了我这个错误:
error[E0119]: conflicting implementations of trait `std::convert::TryFrom<_>` for type `T2`
--> src/lib.rs:4:1
|
4 | impl<U> TryFrom<U> for T2 where U: Into<T1> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: conflicting implementation in crate `core`:
- impl<T, U> TryFrom<U> for T
where U: Into<T>;
这里U
实现Into<T1>
而不是Into<T2>
因此我不太了解错误。 我试图通过实现它来确认没有一揽子实现,它编译时没有冲突:
struct T1;
struct T2(T1);
impl Into<T2> for T1 {
fn into(self) -> T2 {
unimplemented!();
}
}
有什么办法吗? 我不想要这里的默认实现。
特征实现不允许发生冲突。 一个类型完全可以实现Into<T1>
和Into<T2>
。 在这种情况下,您的实现会导致歧义,无论是通过内置的一揽子实现还是从您的一揽子实现来使用T: TryFrom<U>
实现。 因此存在冲突,编译器会拒绝您的实现。
本质上,由于一揽子实现,您不能通用地实现TryFrom
; 你无法避免潜在的冲突。
您的确认没有任何意义,因为Into
没有这样的全面实施会在T1
和T2
之间发生冲突。 如果您尝试通用地实现它,例如impl Into<T2> for U where U: Into<T1>
,那也是一个问题。 泛型是核心问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.