C++静态函数和全局结构体变量应用…

来源:互联网 发布:python 对象转字符串 编辑:程序博客网 时间:2024/06/07 05:25
应用场景:
要求:
1,某个C++工程中,需要在很多个类对象中,获取一个分类信息,并根据分类信息执行不同的操作;
2,该分类信息需要在工程代码的入口类构造函数中赋值,其他地方最好限制为只读。
待选方案:
1,全局结构体变量;2,类的静态函数;

 
功能代码段一:
#ifndef CATEGORYINFO
#define CATEGORYINFO
#include "SF_RFID_CommonDef.h"

struct CategoryInfo
{
    TYP_PROTOCOL_NAME           m_eProtocol;
    TYP_WORK_MODE               m_eWorkMode;
    TYP_TEST_TYPE               m_eTestType;
};

extern CategoryInfo g_stCategoryInfo;
#endif // CATEGORYINFO
 
    这段代码用的是全局结构体变量,并在该头文件对它进行了声明"extern CategoryInfo g_stCategoryInfo;",故在其他类中使用时,仅需要包含该头文件,即可直接调用。它的真正定义和初始化放在入口类(对象)中。
优点:代码简洁,使用方便。
缺点:不能防止使用时对该变量的修改。
 
代码段二:
#ifndef CATEGORYINFO
#define CATEGORYINFO
#include "SF_RFID_CommonDef.h"
class CategoryInfo
{
public:
    CategoryInfo() {}
    ~CategoryInfo() {}
    static void  SetProtocol(TYP_PROTOCOL_NAME protocol) { m_eProtocol = protocol; }
    static void SetWorkMode(TYP_WORK_MODE mode) { m_eWorkMode = mode; }
    static void SetTestType(TYP_TEST_TYPE type) { m_eTestType = type; }
    static TYP_PROTOCOL_NAME  GetProtocol() { return m_eProtocol; }
    static TYP_WORK_MODE GetWorkMode() { return m_eWorkMode; }
    static TYP_TEST_TYPE GetTestType() { return m_eTestType; }
private:
    static TYP_PROTOCOL_NAME           m_eProtocol;
    static TYP_WORK_MODE               m_eWorkMode;
    static TYP_TEST_TYPE               m_eTestType;
};
#endif // CATEGORYINFO
第二段代码,使用了类的静态函数和静态变量。在取值的时候,获得的是副本的值,不会存在改变原值的风险。
缺点:要对静态成员强制初始化,代码繁多。
 
另:
对于多个enum类型变量,可以考虑采用错位的方式定义,通过按位比较的方式进行判断,可以缩减变量的个数。

0 0