gpt4 book ai didi

casting - 为什么找不到 dyn Any 类型的 downcast_ref 方法?

转载 作者:行者123 更新时间:2023-11-29 07:55:32 26 4
gpt4 key购买 nike

我正在尝试创建自己的模拟框架,但遇到了这个问题。当我尝试向下转换我的 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
}

Playground

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>();
| ^^^^^^^^^^^^

如果我使用关联的函数语法调用它,它会找到函数并正常工作。

为什么编译器无法从 dyn Any 类型的变量 any 中找到 downcast_ref() 方法?

最佳答案

那是因为Any::downcast_ref()未针对 dyn Any + 'static + Sync 实现,仅针对:

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

关于casting - 为什么找不到 dyn Any 类型的 downcast_ref 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55790807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com