MFC 动态数组CArray类使用说明实例

CArray<CProductPara,CProductPara> m_allPara 到底是什么?

CArray = MFC 动态数组

相当于 自动变长的数组

你可以无限添加型号,不用管大小

自带:添加、删除、获取数量、按下标取数据

尖括号里两个参数是什么意思?

CArray<【元素类型】, 【传递类型】>

第一个 CProductPara:数组里存的是 产品参数结构体

第二个 CProductPara:函数传参时,按 值传递

m_allPara0 → 第1个型号参数

m_allPara1 → 第2个型号参数

m_allPara2 → 第3个型号参数

...

标准可保存结构体模板

cpp 复制代码
class CProductPara
{
public:
    union
    {
        struct
        {
            // ===== 固定长度字符串 =====
            char m_strTypeName[24];
            char m_strBrand[24];

            // ===== 整数 =====
            int  m_nValue;
            long m_lValue;
            BYTE m_byte;

            // ===== 浮点数 =====
            float m_fValue;
            double m_dValue;

            // ===== 布尔 =====
            bool m_bCheck;
            BOOL m_bEnable;

        };

        char len[1024]; // 固定总长
    };
};

void CSEAL_PRESSUREApp::SaveTypeCFG()
{
	
	CFile file;
	CProductPara paraBuf;
	file.Open(m_strTypeCFGFileName,CFile::modeCreate|CFile::modeWrite);
	for(int i = 0 ; i < theApp.m_allPara.GetSize() ; i ++)
	{
		paraBuf = m_allPara[i];
		file.Write(&paraBuf,sizeof(m_allPara[i]));
	}
	file.Close();
}

CString // ❌ 绝对不能用!

string // ❌ 绝对不能用!

char* // ❌ 指针!不行!

int* // ❌ 指针!不行!

CArray // ❌ 不能嵌套!

CDialog // ❌ 窗口类 不行!

CObject // ❌ MFC对象 不行!

vector<> // ❌ 动态数组 不行!

因为它们不是固定大小、带内存指针、无法直接二进制保存:

能直接用 file.Write() 保存进二进制文件的只有:纯值类型 + 固定长度数组

任何带 "动态内存"、"指针"、"CString" 的都不能用!

结构体里安全添加的常用类型

cpp 复制代码
BYTE        m_byte;      // 无符号单字节 0~255
WORD        m_word;      // 无符号双字节 0~65535
DWORD       m_dword;     // 无符号4字节
short       m_short;     // 短整型
long        m_long;      // 长整型
unsigned int m_uint;     // 无符号整数
float // 单精度浮点数
int
double
bool
BOOL // MFC的布尔(TRUE/FALSE)
char[固定长度]

char len1024; 占用的字节数

char len1 = 1 字节

1 个 char = 1 字节

1024 个 char = 1024 字节

bool = 1 字节

int = 4 字节

WORD = 2 字节

DWORD = 4 字节

float = 4 字节

double = 8 字节

相关推荐
hold?fish:palm6 小时前
kv存储主从复制的设计与实现
c++·redis·后端
啦啦啦啦啦zzzz7 小时前
算法:贪心算法
c++·算法·leetcode·贪心算法
charlie1145141917 小时前
现代C++工程实践 WeakPtr 实战(三):WeakPtrFactory 与「最后成员」惯用法
开发语言·c++·开源项目·现代c++
JetComXCpp9 小时前
给 Win32 窗口加上毛玻璃效果——纯 D3D11 实现,零依赖
c++
ysa05103011 小时前
【板子】二分答案(最大最小?)
c++·笔记·算法·板子
是多巴胺不是尼古丁11 小时前
C++基础知识
开发语言·c++
stolentime11 小时前
SP8549 MAIN75 - BST again题解
c++·算法·二叉树·深度优先·图论·记忆化搜索·组合数学
ziguo112212 小时前
C/C++ 错误处理全解:从 errno 到 C++ 异常
linux·c语言·c++·windows·visual studio
stolentime12 小时前
AT_pakencamp_2020_day1_k Gcd of Sum题解
c++·算法
2601_9561219712 小时前
map_计蒜客T1271 完美K倍子数组
c++·算法