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
- C++静态函数和全局结构体变量应用…
- C全局静态变量赘述
- C语言 静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- C语言静态变量和静态函数
- c语言静态变量和静态函数
- .c语言静态变量和静态函数
- C 语言静态变量和静态函数
- c语言静态变量和静态函数
- C语言静态变量和静态函数
- 这三种特殊权限(suid、sgid、sticky)
- 为什么我要开博客
- 容器遍历之foreach学习心得
- Qt中应用STL算法库编译error分析
- [LeetCode254]Factor Combinations
- C++静态函数和全局结构体变量应用…
- Qt和Standard C++智能指针比较
- 小技巧:防跨文件或跨包类型重定义
- Qt调试信息分类和qDebug()导出到文…
- try-catch应用心得
- HDU2041青年歌手大奖赛_评委会打分
- mysql
- Qt5(minGW版)+Qwt编译和安装
- struts2 标签里面不能使用el表达式可以使用ongl表达式