首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么没有为dyn找到任何类型的downcast_ref方法?

为什么没有为dyn找到任何类型的downcast_ref方法?
EN

Stack Overflow用户
提问于 2019-04-22 07:34:24
回答 1查看 1.1K关注 0票数 5

我正在尝试创建我自己的模拟框架,我遇到了这个问题。当我试图降低我的Any类型时,它找不到downcast_ref方法:

代码语言:javascript
复制
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
}

游乐场

代码语言:javascript
复制
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方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-22 09:12:41

这是因为Any::downcast_ref()不是为dyn Any + 'static + Sync实现的,仅用于:

  • dyn Any + 'static
  • dyn Any + 'static + Send
  • dyn Any + 'static + Send + Sync
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55790807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档