【发布时间】:2017-12-26 11:48:39
【问题描述】:
我正在尝试在 Rust 中创建一个程序,其中我有一个返回特征对象引用 (&T) 的函数,其中 T 具有 std::any::Any 作为超特征 (T 定义为 trait T: std::any::Any) .由于实现T 的每个值也必须实现std::any::Any,我希望能够做到:
fn give_T_ref() -> &'static T {
...
}
let y: &std::any::Any = give_T_ref();
但这会导致编译器错误,提示 expected trait `std::any::Any`, found trait `T`。
这是编译器中的错误/问题,还是我遗漏了什么?目前有没有办法解决这个问题?
这是我的问题的最小可运行示例 (link to play.rust-lang.org):
use std::any::Any;
trait T: Any {}
struct Implementor {}
impl T for Implementor {}
fn give_T_ref() -> &'static T {
&Implementor {}
}
fn main() {
let y: &Any = give_T_ref();
// ^ expected trait `std::any::Any`, found trait `T`
}
【问题讨论】:
-
这不是沮丧。这是一个向上的转变。