问题描述
尝试在Rust中使用联合和位域,对于位域,我使用的是bitfield
板条箱,但是我一直在寻找将其与联合使用的示例,但找不到任何东西,现在我遇到了一个错误。
解决此错误的正确方法是为Image2D
/`3D类型创建副本构造函数吗?如果是这样,该怎么做?
error[E0658]: unions with non-`Copy` fields are unstable
--> src\main.rs:48:1
|
48 | / union Image {
49 | | image3D: Image3D,50 | | image2D: Image2D,51 | | }
| |_^
|
= note: see issue #55149 <https://github.com/rust-lang/rust/issues/55149> for more information
error: aborting due to previous error
这是2D点的实现:
extern crate bitfield;
use bitfield::*;
struct Image2D(u32);
bitfield_bitrange!{struct Image2D(u32)}
impl Image2D{
bitfield_fields!{
u32;
valid,_: 0;
width,_: 15,1;
heigth,_: 29,16;
image_type,_:31,30;
}
}
impl std::fmt::Debug for Image2D {
bitfield_debug!{
struct Image2D;
valid,30;
}
}
解决方法
每位Michael回答: 只需将副本导出并克隆到结构的成员中即可解决问题:
#[derive(Copy,Clone)]
struct Image2D(u32);
bitfield_bitrange!{struct Image2D(u32)}
impl Image2D{
bitfield_fields!{
u32;
valid,_: 0;
width,_: 15,1;
heigth,_: 29,16;
image_type,_:31,30;
}
}