【发布时间】:2018-04-30 01:51:56
【问题描述】:
在 Rust 中,&T 其中T 是trait 是一个胖引用,它实际上对应于raw::TraitObject:
pub struct TraitObject {
pub data: *mut (),
pub vtable: *mut (),
}
使用TraitObject,可以在闲暇时解构和重建&T。
然而,虽然从解构&T 中获得vtable 很容易,但如果我一开始就没有&T,而只有T 和S,该怎么办;本质上,类似于:
fn make_vptr<T: ?Sized, S>() -> *mut ();
我怎么能从那里预测 v-ptr 呢?有什么我可以使用的内在函数吗?
注意:创建S(或凭空变出)然后创建&T 引用的幼稚实现是行不通的;编译器抱怨T 不一定是trait,因此&T 的大小不是一个指针就是两个指针。
【问题讨论】:
标签: rust trait-objects