给定这样的情况:
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 的等价物。
最佳答案
据我所知,目前这是不可能的。定义 fn do_something<T : Derived>
与您现有的功能一起导致编译错误:
error: duplicate definition of value `do_someting`
因为这两个版本都可以用于 Basic。
有一些建议允许显式边界,如 <T: Basic + !Derived>
这将使您能够解决此冲突。
但我个人希望在 1.0 版本发布后的某一天 impl 重载/特化成为可能。
关于rust - 取决于特征是否被实现的函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25216446/