在定义特征时,我的理解是:在左侧实施的任何时候都需要右侧的特征名称.如果是这样,为什么以下编译:
use std::any::Any;
trait Trait: Any {}
struct Thing {}
impl Trait for Thing {}
Run Code Online (Sandbox Code Playgroud)
以下不编译(这符合我对正确的理解)
trait RequiredTrait {}
trait Trait: RequiredTrait {}
struct Thing {}
impl Trait for Thing {}
Run Code Online (Sandbox Code Playgroud)
std::any包含实现:
impl<T> Any for T
where
T: 'static + ?Sized,
Run Code Online (Sandbox Code Playgroud)
这意味着任何类型Any只要它包含的任何引用都是实现的'static,并且类型的大小.您的Thing结构符合这两个要求,因此它实现Any并且您的代码编译.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |