1 个不稳定版本
0.1.0 | 2022 年 1 月 10 日 |
---|
2788 在 Rust 模式 中
4KB
此 crate 使用功能 negative_impls 和 auto_traits
你可能想要做类似的事情
struct Foo<T>(T);
impl<T: From<U>, U> From<Foo<U>> for Foo<T> {
fn from(v: Foo<U>) -> Self {
Self(T::from(v.0))
}
}
但它不会工作,因为它与 impl<T> From<T> for T {}
提供的实现冲突。
所以我们必须对 Foo<T> != Foo<U>
进行界限
此 crate 提供了 NotEqual
特性
(T, U): NotEqual
等价于 T != U
所以这会工作
struct Foo<T>(T);
impl<T: From<U>, U> From<Foo<U>> for Foo<T> where (Foo<T>, Foo<U>): NotEqual {
fn from(v: Foo<U>) -> Self {
Self(T::from(v.0))
}
}
更简单...
struct Foo<T>(T);
impl<T: From<U>, U> From<Foo<U>> for Foo<T> where (T, U): NotEqual {
fn from(v: Foo<U>) -> Self {
Self(T::from(v.0))
}
}
此 crate 还提供了 Equal