簡體   English   中英

為什么在dyn Any類型中找不到downcast_ref方法?

[英]Why is the downcast_ref method not found for the dyn Any type?

我試圖創建自己的模擬框架,但遇到了這個問題。 當我嘗試向下轉換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>();
   |                   ^^^^^^^^^^^^

如果我使用關聯的函數語法來調用它,它將找到該函數並且可以正常工作。

為何編譯器無法從變量any找到dyn Any類型的downcast_ref()方法?

這是因為未對dyn Any + 'static + Sync實施Any::downcast_ref() ,僅適用於:

  • dyn Any + 'static
  • dyn Any + 'static + Send
  • dyn Any + 'static + Send + Sync

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM