我正在尝试创建我自己的模拟框架,我遇到了这个问题。当我试图降低我的Any类型时,它找不到downcast_ref方法:
use std::any::Any;
use std::collections::HashMap;
struct X;
struct Y;
fn main() {
let mut map: HashMap<&'static str, Box<Any + Sync>> = HashMap::new();
map.insert("x", Box::new(X));
map.insert("y", Box::new(Y));
get_x(map);
}
fn get_x(map: HashMap<&'static str, Box<Any + Sync>>) {
let ref any = map["x"];
let res = Any::downcast_ref::<X>(any); // Works
let res = any.downcast_ref::<X>(); // Fails
}error[E0599]: no method named `downcast_ref` found for type `&std::boxed::Box<(dyn std::any::Any + std::marker::Sync + 'static)>` in the current scope
--> src/main.rs:18:19
|
18 | let res = any.downcast_ref::<X>();
| ^^^^^^^^^^^^如果我使用关联的函数语法调用它,它就会找到函数,并且没有问题。
为什么编译器不能从变量downcast_ref()类型any中找到dyn Any方法?
发布于 2019-04-22 09:12:41
这是因为Any::downcast_ref()不是为dyn Any + 'static + Sync实现的,仅用于:
dyn Any + 'staticdyn Any + 'static + Senddyn Any + 'static + Send + Synchttps://stackoverflow.com/questions/55790807
复制相似问题