You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何指定where子句实现类型引用的转换?

问题解答

你需要在where子句中填写 Type: Trait。

原因说明

Rust中,当类型Type实现了trait Trait时,&Type可以被隐式强制转换为&dyn Trait(前提是Trait满足对象安全——你的示例里TestTrait没有关联类型或非对象安全的方法,符合要求)。编译器会自动完成这个引用转换,不需要额外实现From、AsRef等trait。

完整代码示例

trait TestTrait {}

struct TestStruct {}

impl TestTrait for TestStruct {}

fn test<Trait: ?Sized, Type>(object: &Type) -> &Trait
    where Type: Trait
{
    object
}

fn call_test() {
    let object = TestStruct{};
    let t = test::<dyn TestTrait, TestStruct>(&object);
}

内容的提问来源于stack exchange,提问作者chila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:55:25