Size: a a a

Rust — русскоговорящее сообществo

2020 March 02

P

Pavel in Rust — русскоговорящее сообществo
polunin.ai
я ебал просто делать enum Foo { Bar(Bar), Baz(Baz) }
кстати да, мне такого тоже не хватало, а ща хочу смапить гетерогенный список пакованых структур за указателем и пока хз как, наверное надо делать итератор по указателям к хедерам и трай-конструкторы с указателя
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Alex Zhukovsky
добавляй тайп параметров/генериков пока не начнет компилится
fn foo() -> Box<dyn Trait> {
 match {
   1 => Type1,
   2 => Type2,
   3 => Type3,
 }
}
источник

P

Pavel in Rust — русскоговорящее сообществo
жаль нельзя сделать кастомный Sized
источник

p

polunin.ai in Rust — русскоговорящее сообществo
куда здесь что добавлять?
источник

В

Вафель in Rust — русскоговорящее сообществo
Mikola Summer Duck
А как её вызывать потом?
Нужен новый синтаксис. Например:

let obj: &dyn Trait = &T::new();
// same as `T::method()`
obj->method();
источник

p

polunin.ai in Rust — русскоговорящее сообществo
источник

АГ

Алексей Герасимов in Rust — русскоговорящее сообществo
polunin.ai
fn foo() -> Box<dyn Trait> {
 match {
   1 => Type1,
   2 => Type2,
   3 => Type3,
 }
}
box (&Type1::new() as &dyn Trait)?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Вафель
Нужен новый синтаксис. Например:

let obj: &dyn Trait = &T::new();
// same as `T::method()`
obj->method();
welcome to rust++
источник

P

Pavel in Rust — русскоговорящее сообществo
Pavel
жаль нельзя сделать кастомный Sized
кстати, нет пропозалов? чтоб unsized структура могла рассказать языку про свой размер?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Алексей Герасимов
box (&Type1::new() as &dyn Trait)?
тред не читай, сразу отвечай
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
Mikola Summer Duck
Точно как же? По чему ты будешь диспатчиться?
я может ошибаюсь, но ведь trait objects - это два указателя (на данные и методы). Т.е. какой-нибудь &dyn TraitT - это просто два указателя, где второй может служить для диспатчинга
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
polunin.ai
fn foo() -> Box<dyn Trait> {
 match {
   1 => Type1,
   2 => Type2,
   3 => Type3,
 }
}
зачем тебе бокс дин трейта
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
а, потому что ты возвращаешь. Ну да, без авто юнион типов тут никуда
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
self внутри в метода нужен же только для доступа к данным объекта
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Mikhail Voronov
я может ошибаюсь, но ведь trait objects - это два указателя (на данные и методы). Т.е. какой-нибудь &dyn TraitT - это просто два указателя, где второй может служить для диспатчинга
Там ниже есть на эту тему.
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
polunin.ai
я хотел кастануть Box<dyn Trait> к Box<Type>
так и не смог до сих пор
а через raw::TraitObject не пробовали?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Mikhail Voronov
а через raw::TraitObject не пробовали?
нет, хз что это
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
Mikola Summer Duck
Там ниже есть на эту тему.
а где и что именно?
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Mikhail Voronov
а где и что именно?
Под моим постом.
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
polunin.ai
нет, хз что это
ну разобрать dyn Trait до указателя на данные и vtable
https://doc.rust-lang.org/nightly/std/raw/struct.TraitObject.html
источник