В Русте, в &T
, где T
является trait
является жиром ссылки, которые на самом деле соответствует raw::TraitObject
:Как получить v-ptr для данной комбинации Trait/Struct?
pub struct TraitObject {
pub data: *mut(),
pub vtable: *mut(),
}
Используя TraitObject
, можно отменить конструкцию и вновь построить &T
на досуге.
Однако, в то время как получение vtable
от де-построения &T
легко, что если я не имею &T
в первую очередь, но только T
и S
; по существу, что-то вроде:
fn make_vptr<T: ?Sized, S>() -> *mut();
Как я могу бояться v-ptr оттуда? Есть ли какие-либо внутренние свойства, которые я мог бы использовать?
Примечание: наивная реализация создания S
(или заклинания его из воздуха), а затем создание ссылки &T
не работает; компилятор жалуется, что T
необязательно является trait
и поэтому &T
является либо одним указателем, либо двумя указателями в размере.
Не как общий (к сожалению), поскольку он не может быть вызван в рамках общей функции, но этого должно быть достаточно для моей цели. Благодаря! –