CMapStringToPtr是啥,怎么用?
主标题:CMapStringToPtr是啥,怎么用?
副标题:FooButton是如何实现“分组”的(AddToGroup)(前置一)
如下为部分源码CMapStringToPtr 类 | Microsoft Docs
...
// 判断分组的字符串是否为空
if (strGroupName.IsEmpty())
return (false);
// 申请一个空指针,用于识别是否存在这个组
void* pGroup = NULL;
getButtonGroup (strGroupName, pGroup);
if (pGroup == NULL) {
pGroup = new CPtrArray();
ASSERT (pGroup != NULL);
m_btnGroups.SetAt (strGroupName, pGroup);
}
...
在了解机制之前需要先了解一个函数 CMapStringToPtr
函数的作用说明如下:
StringToPtr的成员函数与CMapStringToOb类的成员函数相似。由于这种相似性,因此可以为指定的成员函数使用CMapStringToOb参考。不管是否将CObject指针看作函数参数,还是返回值,它都会将指针替换为空值。另外,不管是否将CString指针看作函数参数,还是返回值,它都会将指针替换为空值。
是不是看的一脸懵逼,看不懂没关系,可以简单的理解为一句话:
“将指定字符串转换成一个对象并在内存中分配一段地址。”
那么这个玩意儿有那些用法了?这就不得不提到类里面的函数了。
操作 | 作用 |
---|---|
CMapStringToPtr | 构造函数-构造一个将CString对象映射为空指针的收集 |
SetAt | 在映射中插入一个元素,但假如发现了相匹配的关键码,则替换已经存在的元素 |
Lookup | 返回以CString值为基础的空指针 |
RemoveKey | 删除关键码指定的元素 |
RemoveAll | 删除映射中所有的元素 |
GetNextAssoc | 获取循环中下一个元素 |
GetCount | 返回映射中元素的个数 |
IsEmpty | 测试是否为空映射(估测是循环中使用) |
看了上面的函数,也就是说完全可以把这玩意儿当成python里面的字典使用,当然这个并不返回实际的东西,但是我们可以在全局找到我们需要的字符串。
具有以下功能
- 每个字符串都具有相同的内存
- 不同字符串有不同的内存,并且可以获取到这些不同的内存
- 可以通过遍历获取当前所有的元素的地址
综上,这个函数的功能就是通过唯一值字符串获取一段内存地址。至于你把这段地址拿去干啥。且看下回分解。
时间:2021年8月28日10:45:26
作者:Abraverman