zoukankan      html  css  js  c++  java
  • 一个通用类,用于解决联合体初始化问题

    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)},
    };
  • 相关阅读:
    WordPress网站绑定多个域名的方法
    htpasswd 命令使用
    在Windows下用OpenSSL生成证书步骤
    WCF中关于List和数据的转换问题
    NET2.0的配置文件
    C# Attribute
    c#自定义属性
    VS2005中读写配置文件(方法二)
    c#的反射
    Asp.NET 操作配置文件 Steven Pei 博客园
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/14237554.html
Copyright © 2011-2022 走看看