在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
的不同约束将其实现为trait
Default

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())
}
}

非常感谢!看来,
专业化
在稳定方面仍然存在一些问题。。。希望这一问题在将来得到解决。