>>940
コードがわかりくいのかなと思って
vtableのところをもう少しわかりやすくしてみた
trait TraitA { fn method1(&self); fn method2(&self); }
trait TraitB { fn method1(&self); fn method2(&self); }
trait TraitAB: TraitA + TraitB {}
struct Foo;
impl TraitA for Foo { fn method1(&self) {} fn method2(&self) {} }
impl TraitB for Foo { fn method1(&self) {} fn method2(&self) {} }
impl TraitAB for Foo {}
macro_rules! as_addr { ($target:expr) => { &($target) as *const _ } }
macro_rules! as_array { ($addr:expr, $index:expr) => { *(($addr) as *const usize).offset($index) } }
macro_rules! vtable { ($dyn:expr, $index:expr) => { unsafe { as_array![as_array![as_addr!($dyn), 1], $index] } } }
fn main() {
let foo = Foo;
let dyn_foo: &dyn TraitAB = &foo;
assert_eq!(vtable![dyn_foo, 0], std::ptr::drop_in_place::<Foo> as usize);
assert_eq!(vtable![dyn_foo, 1], std::mem::size_of::<Foo>());
assert_eq!(vtable![dyn_foo, 2], std::mem::align_of::<Foo>());
assert_eq!(vtable![dyn_foo, 3], <Foo as TraitA>::method1 as usize);
assert_eq!(vtable![dyn_foo, 4], <Foo as TraitA>::method2 as usize);
assert_eq!(vtable![dyn_foo, 5], <Foo as TraitB>::method1 as usize);
assert_eq!(vtable![dyn_foo, 6], <Foo as TraitB>::method2 as usize);
}
このように各トレイトの同名メソッドを区別してvtableのインデックス化(このコードだと他の部分含めてインデックス3~6)をしている
結局C++とRustってどっちが良いの?
レス数が950を超えています。1000を超えると書き込みができなくなります。
972デフォルトの名無しさん
2023/04/01(土) 23:32:16.53ID:AdU+jSWJレス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 【W杯】日本はF組2位で3大会連続決勝T進出 1回戦で王国ブラジルと激突 スウェーデンと1-1ドロー ★8 [恐縮です★]
- 【サッカー/W杯】オーストラリア、2位で決勝T進出 パラグアイとスコアレスドロー パラグアイは勝ち点4の3位で他組の結果待ちに [THE FURYφ★]
- 【W杯】日本はF組2位で3大会連続決勝T進出 1回戦で王国ブラジルと激突 スウェーデンと1-1ドロー ★9 [恐縮です★]
- 地 震 [KingFisherは魚じゃないよ★]
- 【東京】ポルシェで交差点を約100キロで右折し多重事故 運転の中国籍の男を逮捕 文京区 [ぐれ★]
- 【SNS】はま寿司“洗剤男が”釈放→再び寿司店で動画投稿「全然反省してない」騒然、賠償金を本人は「払えない」 [靄々★]
- 【高市悲報】ウクライナ大統領を僭称するゼレンスキー「あと40日以内にロシアを敗北に追い込んでやる😤」 [616817505]
- 【悲報】高市、母親が警察官だった設定も嘘だった疑惑が浮上🫪これもう恐怖だろ… [359965264]
- 【高市解散】サナエトークン補償に文句言ってる奴どう思う?溝口「楽して儲けようとした奴らだろ」 バッシングへ(自民党コイン) [169920436]
- マッスル北村💪😅💪🏡
- 【悲報】高市「私の過去を知ってるもんは全部死んでくれへんかなあ、喋るなよ🫪」インタビュー記事より😨 [359965264]
- 同じ部隊の部下3人にパワハラ。頭をスリッパでたたいたり、顔を殴ったりした自衛官の50代空曹長が懲戒処分に [663766621]