小编Jak*_*sel的帖子

Rust Trait对象转换

由于此错误的两个实例,以下代码将无法编译:

错误[E0277]:Self: std::marker::Sized不满足特征限制

我不明白为什么Sized在这个实例中需要&self&Any作为指针并且操作不需要知道实现特征的结构的大小,它只需要知道指针本身及其转换的类型和它将具有,因为&self在特征内部实现时是通用的.

我认为这可能是编译器强制执行不必要的约束的一个实例,我考虑过使用生锈的GitHub仓库提出问题,但我想我应该看看,在我提出问题之前,有人在这里知道我不知道的事情.

use std::any::Any;

trait Component: Any {
    fn as_any(&self) -> &Any {
        self
    }

    fn as_any_mut(&mut self) -> &mut Any {
        self
    }
}
Run Code Online (Sandbox Code Playgroud)

替代方法是为实现此特征的结构创建as_any()as_any_mut()需要函数,但对于那些结构,实现将始终完全按照此处显示到每个单独的字符,从而生成相同样板代码的多个实例.

type-conversion coercion traits rust

3
推荐指数
2
解决办法
1287
查看次数

标签 统计

coercion ×1

rust ×1

traits ×1

type-conversion ×1