考虑到这样的情况:
trait Basic {
// Some functions
}
trait Derived : Basic {
// some other functions
}
fn do_someting<T : Basic>(target: &mut T) {
// do stuff
}
是否可能使do_something
函数的行为有所不同,具体取决于target
是否实现了特征Derived
(编译时知道的信息)?
我想使用模板专业化可以在C ++中实现类似的功能,但我没有看到Rust等效。
答案 0 :(得分:2)
AFAIK目前无法实现。在现有函数旁边定义fn do_something<T : Derived>
会导致编译错误:
error: duplicate definition of value `do_someting`
因为两个版本都可用于Basic。
有一些建议允许明确界限,例如<T: Basic + !Derived>
,以便您解决此冲突。
但我个人希望在1.0版本发布后的某一天可以实现impl重载/专业化。