Trait есть метод fn foo(&mut self, A, B, C)
хочу превратить это в (*mut (), unsafe fn(*mut (), A, B, C) самым безопасным образом.
Есть идеи?
короче, трансмьютишь указатель в два указателя, второй на втейбл лейаут втейбла это размер, потом дроп, потом указатели на методы в порядке объявления (not a medical advice)
а вообще лол, указатель получаешь как ptr as *mut (), метод получаешь как <dyn Trait as Trait>::foo и трансмьютишь к нужному типу
попробуй вот так короче
Так и хотел, но передумал
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=fc6426da0b1761a3dfa6bcacfab172ab
У такого решения есть небольшой недостаток, что нельзя будет имплементить трейт на !Sized. Но кому неиронично не пофиг.
Обсуждают сегодня