功能行为取决于是否实现了特征

时间:2014-08-09 07:52:13

标签: rust

考虑到这样的情况:

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等效。

1 个答案:

答案 0 :(得分:2)

AFAIK目前无法实现。在现有函数旁边定义fn do_something<T : Derived>会导致编译错误:

error: duplicate definition of value `do_someting`

因为两个版本都可用于Basic。

有一些建议允许明确界限,例如<T: Basic + !Derived>,以便您解决此冲突。

但我个人希望在1.0版本发布后的某一天可以实现impl重载/专业化。