我正在尝试创建自己的模拟框架,但遇到了这个问题。当我尝试向下转换我的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
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
如果我使用关联的函数语法调用它,它会找到该函数并正常工作。
为什么编译器不能找到downcast_ref()从变量法any这是一种dyn Any类型?
这是因为Any::downcast_ref()没有为 实现dyn Any + 'static + Sync,仅针对:
dyn Any + 'staticdyn Any + 'static + Senddyn Any + 'static + Send + Sync| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |