对于Rust中的结构体成员,可以像C语言的
从与IRC上的开发人员交谈中得知,并不能保证枚举的所有成员都对齐:
如何计算枚举成员的偏移量?
然而,目的是仅通过检查类型来实现此操作,因此它可以编译为常量,例如:
尝试编写宏时,我遇到了一个问题,无法通过
offsetof
一样计算offsetof
。虽然这适用于结构体字段,但我找不到类似的方法来处理枚举及其变量成员。从与IRC上的开发人员交谈中得知,并不能保证枚举的所有成员都对齐:
如何计算枚举成员的偏移量?
使用实例可能会像这样工作:
enum Test { A(u8), B(f64) };
fn test_me(a: Test) {
if let Test::A(b) = a {
// we could find the offset between 'a' and 'b' here.
// but how to do this without instantiating variables?
println("{}", (b as *const _) as usize - (a as *const _) as usize);
}
}
然而,目的是仅通过检查类型来实现此操作,因此它可以编译为常量,例如:
println("{}", offset_of_enum!(Test, A));
尝试编写宏时,我遇到了一个问题,无法通过
::
连接参数,因此我不确定如何解决这一部分。