>>926
トレイトオブジェクトを扱うためにBoxは不要
ヒープを使うのは必要性があるときのみ
求められているのは俺が書いた「各トレイトの同名メソッドを区別してvtableのインデックス化をしている」の部分だろ
それを直接わかるコードを書いた
ただしvtableはpubではないので現状の仕様を強引にアクセス
インデックス値の順序も変わる可能性ありなので注意
macro_rules! vtable_base { ($dyn:expr) => { *(&$dyn as *const _ as *const usize).offset(1) as *const usize } }
macro_rules! vtable { ($dyn:expr, $index:expr) => { unsafe { *(vtable_base!($dyn).offset($index)) } } }
trait TraitA {
fn method(&self);
}
trait TraitB {
fn method(&self);
}
trait TraitAB: TraitA + TraitB {}
struct Foo;
impl TraitA for Foo { fn method(&self) {} }
impl TraitB for Foo { fn method(&self) {} }
impl TraitAB for Foo {}
fn main() {
let foo = Foo;
let dyn_foo: &dyn TraitAB = &foo;
assert_eq!(vtable![dyn_foo, 3], <Foo as TraitA>::method as usize);
assert_eq!(vtable![dyn_foo, 4], <Foo as TraitB>::method as usize);
}
というわけで動的ディスパッチでもメソッド名衝突の話は必要であり>>886の説明で合っている
結局C++とRustってどっちが良いの?
レス数が900を超えています。1000を超えると表示できなくなるよ。
930デフォルトの名無しさん
2023/04/01(土) 01:55:13.58ID:AdU+jSWJレス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【北区小学校火災】女性教師「電気ストーブ近くで洗濯物を乾かしていた」 失火とみて捜査 燃えた残骸に“繊維片”付着 [Ailuropoda melanoleuca★]
- 【北区小学校火災】女性教師「電気ストーブ近くで洗濯物を乾かしていた」 失火とみて捜査 燃えた残骸に“繊維片”付着 ★2 [Ailuropoda melanoleuca★]
- 仏南西部で44.3℃ 全土で死者40人、2歳と4歳児も犠牲に 英でも39℃予想 [首都圏の虎★]
- 歌舞伎町の有名ホスト4人 アメリカ入国を拒否され強制送還 「君達の職業では純粋な旅行として認められないから帰れ」と言われる [muffin★]
- 「排外主義が日本全体で跋扈」村井嘉浩宮城県知事−外国ルーツの女子児童へのいじめで ★2 [蚤の市★]
- 「大変無礼な法案」衆議院「定数削減」に野党5党は反対で一致 [首都圏の虎★]
- 東京都北区の小学校火災、女性教員「電気ストーブで洗濯物を乾かしていた」 [377482965]
- うぃんどうずとかいう欠陥OS
- 産経新聞、自民党なのに石破と岩屋が国旗損壊罪反対していると報じる [245325974]
- 【高市ボーナス】キオクシアの特別ボーナス、サムスンやSKハイニクスの10倍!太っ腹すぎるだろこの企業! [342017262]
- 温泉5歳全裸行方不明。父親「な、なんだと! 息子が中から鍵を掛けた!? ここは硬貨で解錠だ!」 [592058334]
- 【文春】高市、暴かれた本性。木下秘書「文春は中国から毎週一千万円もらっている」自民党内から総スカンなど🤓 [359965264]