一个通用类,用于解决联合体初始化问题
c++早期版本中,结构中的联合体,在初始化时,总有很多支持不佳的编译器,这儿提供一个通用类,用于实现联合体的初始化
class UnionValue { 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_; float value_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() {return base_value_.value_u8_;} uint16_t value_u16() {return base_value_.value_u16_;} uint32_t value_u32() {return base_value_.value_u32_;} int8_t value_i8() {return base_value_.value_i8_;} int16_t value_i16() {return base_value_.value_i16_;} int32_t value_i32() {return base_value_.value_i32_;} float value_f() {return base_value_.value_f_;} };
整个类定义简单,且不占用额外空间,使用时也不需要有额外的代码
示例结构体:
typedef struct Level_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)}, };