一个通用类,用于解决联合体初始化问题
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)},
};