在Rust中,有没有任何方法可以用相同的结构实现一个trait,该结构包含不同的泛型约束?
假设我有一个结构在Rust中,有没有任何方法可以用相同的结构实现一个trait,该结构包含不同的泛型约束?,rust,traits,Rust,Traits,假设我有一个结构S,我想用泛型类型T的不同约束将其实现为traitDefault: struct S{…} impl默认为S 哪里 T:Ord { fn default()->Self{ Self::new() } } impl默认为S 哪里 T:Ord+默认值 { fn default()->Self{ Self::build(T::default()) } } 但是,编译器抱怨: error[E0119]: conflicting implementations of trait std:
S
,我想用泛型类型T
的不同约束将其实现为traitDefault
:
struct S{…}
impl默认为S
哪里
T:Ord
{
fn default()->Self{
Self::new()
}
}
impl默认为S
哪里
T:Ord+默认值
{
fn default()->Self{
Self::build(T::default())
}
}
但是,编译器抱怨:
error[E0119]: conflicting implementations of trait std::default::Default for type S<_>
错误[E0119]:类型S的trait std::default::default的冲突实现
有什么方法可以编译这样的代码吗?在stable Rust中没有这种方法 您可以在夜间生锈时使用(不稳定且不可靠!)
专门化
功能:
#![feature(specialization)]
struct S<T> {
x: Option<T>
}
impl<T> S<T> {
fn new() -> Self { Self { x: None } }
fn build(x: T) -> Self { Self { x: Some(x) } }
}
impl<T> Default for S<T>
where
T: Ord
{
default fn default() -> Self {
Self::new()
}
}
impl<T> Default for S<T>
where
T: Ord + Default
{
fn default() -> Self {
Self::build(T::default())
}
}
#![专题(专门化)]
结构{
x:选项
}
impl S{
fn new()->Self{Self{x:None}
fn构建(x:T)->Self{Self{x:Some(x)}
}
impl默认为S
哪里
T:Ord
{
默认值fn default()->Self{
Self::new()
}
}
impl默认为S
哪里
T:Ord+默认值
{
fn default()->Self{
Self::build(T::default())
}
}
非常感谢!看来,
专业化
在稳定方面仍然存在一些问题。。。希望这一问题在将来得到解决。