请考虑以下情形:
Do
的所有类型上实现特征CanDo
。 CanDo
的类型中,有些实现了特征CanDoQuickly
。Do
而不是CanDo
的那些类型以一种方式实现CanDoQuickly
,而对于CanDoQuickly
的那些类型以另一种方式实现。 / li>
我知道,在Rust中,我们没有负面特质界限。我的直觉是,我们应该应该可以使用内置的opt-in来实现此目的(尽管我没有尝试成功)。
我想知道,无论代码的复杂性如何,都可以在稳定的Rust上实现我想做的事情。如果不是,这是设计选择吗?想要做这样的事情天生就不好吗?对我来说,这听起来像是一个普遍的问题,令我惊讶的是,这是一种过时的做法。
答案 0 :(得分:2)
在nightly
上,仍可能具有不稳定的specialization
功能和default
实现(另请参见the tracking issue for specialization):
#![feature(specialization)]
trait DoIt {
fn do_it(&self);
}
impl<T> DoIt for T
where
T: CanDo,
{
default fn do_it(&self) {
self.do_impl()
}
}
impl<T> DoIt for T
where
T: CanDoQuickly,
{
fn do_it(&self) {
self.do_quickly_impl()
}
}
trait CanDo {
fn do_impl(&self) {
println!("slowly");
}
}
trait CanDoQuickly: CanDo {
fn do_quickly_impl(&self) {
println!("quickly");
}
}
struct S1;
impl CanDo for S1 {}
impl CanDoQuickly for S1 {}
struct S2;
impl CanDo for S2 {}
fn main() {
S1.do_it();
S2.do_it();
}