c++早期版本中,结构中的联合体,在初始化时,总有很多支持不佳的编译器,这儿提供一个通用类,用于实现联合体的初始化

classUnionValue {private:
union {
uint8_t value_u8_;
uint16_t value_u16_;
uint32_t value_u32_;
int8_t value_i8_;
int16_t value_i16_;
int32_t value_i32_;
floatvalue_f_;
} base_value_;
public:explicit UnionValue(uint8_t u8_) { base_value_.value_u8_ =u8_;}explicit UnionValue(uint16_t u16_){ base_value_.value_u16_ =u16_;}explicit UnionValue(uint32_t u32_){ base_value_.value_u32_ =u32_;}explicit UnionValue(int8_t i8_) { base_value_.value_i8_ =i8_;}explicit UnionValue(int16_t i16_) { base_value_.value_i16_ =i16_;}explicit UnionValue(int32_t i32_) { base_value_.value_i32_ =i32_;}explicit UnionValue(float f_) { base_value_.value_f_ =f_;}

uint8_t value_u8() {
returnbase_value_.value_u8_;}
uint16_t value_u16() {
returnbase_value_.value_u16_;}
uint32_t value_u32() {
returnbase_value_.value_u32_;}
int8_t value_i8() {
returnbase_value_.value_i8_;}
int16_t value_i16() {
returnbase_value_.value_i16_;}
int32_t value_i32() {
returnbase_value_.value_i32_;}float value_f() {returnbase_value_.value_f_;}
};

 

整个类定义简单,且不占用额外空间,使用时也不需要有额外的代码

示例结构体:

typedef structLevel_st {
uint8_t prior_;
//优先顺序顺序 uint8_t type_; //数值类型:0 - bool/1 - uint8_t/2 - uint16_t/3 - uint32_t/4 - uint8_t/5 - uint16_t/6 - uint32_t/7 - float uint32_t offset_; //偏移 UnionValue base_value_;
}Level_st ;

初始化代码如下:

Level_st override_level[] ={
{
0, 3, 2, UnionValue(uint32_t(0))},
{
1, 7, 2, UnionValue(0.95f)},
};

 

标签: none

添加新评论