コードを考えてみましょう:なぜボックス<trait>はボックス<struct>とサイズが異なりますか?
use std::boxed::Box;
use std::mem::transmute;
trait Total {
fn total(&self) -> i32;
}
#[derive(Debug)]
struct S {
a: i32,
b: i32,
c: i32,
}
impl S {
fn new() -> S {
S { a: 2, b: 3, c: 4 }
}
}
impl Total for S {
fn total(&self) -> i32 {
self.a + self.b + self.c
}
}
fn main() {
let b: Box<Total> = Box::new(S::new());
unsafe {
let s: Box<S> = std::mem::transmute(b);
println!("S = {:?}", s);
}
}
これはエラーを与える:Box<Total>
は本当に私たちは、このエラーを取得しない理由Box<S>
、であることを考えると
error[E0512]: transmute called with differently sized types: Box<Total> (128 bits) to Box<S> (64 bits)
--> src/main.rs:30:29
|
30 | let s: Box<S> = std::mem::transmute(b);
| ^^^^^^^^^^^^^^^^^^^
「let b:Box」はどういう意味ですか? –
Aurora0001
私は[2番目で明らかに重要性の低い質問](http://meta.stackexchange.com/q/39223/281829)を削除しました。 – Shepmaster