我正在努力解决对象安全的基础问题.如果我有这个代码
struct S {
x: i32
}
trait Trait: Sized {
fn f(&self) -> i32 where Self: Sized;
}
fn object_safety_dynamic(x: Trait) {}
Run Code Online (Sandbox Code Playgroud)
我收到
fn object_safety_dynamic(x: Trait) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `traits::Trait` cannot be made into an object
= note: the trait cannot require that `Self : Sized`
Run Code Online (Sandbox Code Playgroud)
当添加/更改:Sized为特征的继承或f绑定时,我收到稍微不同的错误消息.
有人能解释一下:
为什么这个特定的例子不起作用?Trait Objects一章说明"那么什么使方法对象安全?每种方法都必须要求Self: Sized".那不是满满的吗?
Trait: Sized和之间有什么区别where Self: Sized?(嗯,是的,一个继承了特性,另一个是参数绑定,但是从Rust的特质对象的角度来看?
我必须做的首选改变是什么object_safety_dynamic?
rustc 1.19.0-nightly (01951a61a 2017-05-20) …