各型毎にtrait objectやvtableはこういう構造になっている
let mut stdin: std::io::Stdin = std::io::stdin();
let addr_stdin = addr!(stdin); // &mut借用する前にアドレスを得ておく
let dyn_stdin: &mut dyn std::io::Read = &mut stdin; // ここで dyn Readのtrait object作成
assert_eq!(val!(addr!(dyn_stdin), 0), addr_stdin); // 前半は元のstdinを指している
// assert_eq!(val!(addr!(dyn_stdin), 1), 【Stdin用のvtable】); // 後半はStdin用vtableをを指している
assert_eq!(val!(val!(addr!(dyn_stdin), 1), 3), <std::io::Stdin as std::io::Read>::read as usize);
assert_eq!(val!(val!(addr!(dyn_stdin), 1), 4), <std::io::Stdin as std::io::Read>::read_vectored as usize);
別の型でも同じようにdyn Read作成
let mut file: std::fs::File = std::fs::File::open("/dev/null").unwrap();
let addr_file = addr!(file);
let dyn_file: &mut dyn std::io::Read = &mut file; // trait object作成
assert_eq!(val!(addr!(dyn_file), 0), addr_file); // 前半は元のfileを指している
// assert_eq!(val!(addr!(dyn_stdin), 1), 【File用のvtable】); // 後半はFile用vtableをを指している
assert_eq!(val!(val!(addr!(dyn_file), 1), 3), <std::fs::File as std::io::Read>::read as usize);
assert_eq!(val!(val!(addr!(dyn_file), 1), 4), <std::fs::File as std::io::Read>::read_vectored as usize);
上述Stdinの時と同じ位置にFile用のread()やread_vectored()がvtableに入っていることがわかる
したがって>>59や>>51が正しいと思う
各trait毎にvtableのメソッドの位置が決まり
そのtraitを実装する各型毎にvtableが作成される
Rust part14
■ このスレッドは過去ログ倉庫に格納されています
60デフォルトの名無しさん
2022/02/21(月) 17:43:56.41ID:LC1rF3os■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【米紙報道】高市首相「コングレッショナルフェロー(官職)」経歴詐称疑惑… ★2 [BFU★]
- 【北区小学校火災】女性教師「電気ストーブ近くで洗濯物を乾かしていた」 失火とみて捜査 燃えた残骸に“繊維片”付着 ★7 [Ailuropoda melanoleuca★]
- 【W杯】森保一監督が「首位突破」を厳命!スウェーデン戦は大量得点の圧勝狙う 2位じゃダメなのですか?ダメなのです!! [征夷大将軍★]
- 【W杯】元ブラジル代表ロナウド氏「日本には簡単に勝てる」決勝T1回戦で対戦可能性…避けたいのは「オランダ」 ★3 [首都圏の虎★]
- 【ブロマンス詐欺】「好き♡」 70代男性にメッセージ 現金2000万円をだまし取った疑い 64歳の男を逮捕 [nita★]
- 【クールジャパン】ゲームやアニメなどコンテンツ産業の海外展開支援、政府が司令塔の法人設立へ…日本の「勝ち筋」に官民の叡智結集 [樽悶★]
- 【衝撃】高市早苗、やはり連邦なんとか官ではないだけで米国滞在も滞在中は英語を話してたも事実なのにG7で口パクしてると発覚 [784319933]
- 【同時視聴】キングスマン:ゴールデン・サークル★2
- 【同時視聴】キングスマン:ゴールデン・サークル
- 高市早苗さんが元米国議会立法調査官なんて立派なものではなくコロラドでインターンしてただけではないかという疑惑、徐々にバレ始める [617981698]
- 現役JDのお茶会スレ( ¨̮ )︎︎𖠚ᐝ16
- 金バエ(享年48)「毎日ビール9リットル飲んでいたら肝硬変になりました」 [832215575]