`impl Foo for Foo` 的目的是什么?
what's the purpose of `impl Foo for Foo`?
我正在寻找为什么大小特征不是对象安全的答案,例如:
trait Foo:Sized{}
Foo 不是对象安全的。
我读过一些关于对象安全的帖子,比如object-safety and sizedness-in-rust。我发现深层原因是编译器自动 impl Foo for Foo
.
我很困惑为什么编译器会这样做以及为什么这会导致 Foo
对象不安全?
非常感谢。
impl Foo for Foo
是用 Rust 编写“为特征对象 Foo
实现特征 Foo
”的方式。如果此特征的特征对象实现了特征,则特征只能是对象安全的。显然,拥有一个不实现自身的特征对象没有多大意义。
通过指定 trait Foo : Sized {}
,您要求 Foo
的所有实现者也必须实现 Sized
。但是 Rust 中的所有 trait 对象都是 ?Sized
,这意味着它们可以取消大小。因此类型 Foo : Sized
的特征对象不能实现 Foo
,所以你不能写
impl Foo for Foo
或者换句话说,特征不是对象安全的。
我正在寻找为什么大小特征不是对象安全的答案,例如:
trait Foo:Sized{}
Foo 不是对象安全的。
我读过一些关于对象安全的帖子,比如object-safety and sizedness-in-rust。我发现深层原因是编译器自动 impl Foo for Foo
.
我很困惑为什么编译器会这样做以及为什么这会导致 Foo
对象不安全?
非常感谢。
impl Foo for Foo
是用 Rust 编写“为特征对象 Foo
实现特征 Foo
”的方式。如果此特征的特征对象实现了特征,则特征只能是对象安全的。显然,拥有一个不实现自身的特征对象没有多大意义。
通过指定 trait Foo : Sized {}
,您要求 Foo
的所有实现者也必须实现 Sized
。但是 Rust 中的所有 trait 对象都是 ?Sized
,这意味着它们可以取消大小。因此类型 Foo : Sized
的特征对象不能实现 Foo
,所以你不能写
impl Foo for Foo
或者换句话说,特征不是对象安全的。