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

posted @ 2021-08-28 14:05  Abraverman  阅读(211)  评论(0编辑  收藏  举报