rust - 取决于特征是否被实现的函数行为

标签 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 的等价物。

最佳答案

据我所知,目前这是不可能的。定义 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/

相关文章:

mysql - 如何从一个 mysql::Conn 创建多个准备好的语句?

rust - 为什么 pin_mut 中需要 "ownership test"?

rust - 如何为 move 的 Vec<> 参数调用 Vec<>::append()?

rust - 是否可以在特征定义中使用 `impl Trait` 作为函数的返回类型?

data-structures - 如何在不需要分配给新变量的情况下为链表实现前置?

string - 我应该实现 Display 还是 ToString 来将类型呈现为字符串?

rust - 如何从使用rust 的集合中返回 Vec<String>?

rust - 如何避免 Rust 中的过度克隆?

error-handling - 如何让 Result<T, E1> 与 Result<T,E2> 对齐?

performance - 为什么具有不同整数参数大小的相同函数更快?