首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

nClassIndex = (DWORD)(*m_pStoreMap)[(void*)pClassRef],该如何处理

2012-04-02 
nClassIndex (DWORD)(*m_pStoreMap)[(void*)pClassRef]问个语法问题, MFC中的文档读写的一个类型转换请

nClassIndex = (DWORD)(*m_pStoreMap)[(void*)pClassRef]
问个语法问题, MFC中的文档读写的一个类型转换
请讲一下是怎么回事?

[解决办法]
假设 pClassRef指向的地址单元的起始地址是 1000,如下:

1000:-----//pClassRef所指向的起始地址
-----
-----
-----
然后 (void*)pClassRef将 CRuntimeClass*类型的指针转换成了void*
因为指针的类型决定了这个指针如何去解释它所指向的地址单元,所以
pClassRef在转换成void*前,可能指向一个CRuntimeClass对象(假如没有派生类)
转换成 void* 后,pClassRef就不能再解释它所指向的地址单元了(void类型的指针的特点)
要想再使用pClassRef就必须将其转换成一个有意义的类型指针,如:
(*m_pStoreMap)[(void*)pClassRef];//这里的m_pStoreMap应该是typedef 过的,否则不能这么用
类似于:typedef CMapPtrToPtr *m_pStoreMap;
这里的m_pStoreMap的类型就是 CMapPtrToPtr,经过这种转换又将pClassRef的类型转换成了CMapPtrToPtr*
类型,这时pClassRef对所指向的内存单元的解释就是一个CMapPtrToPtr对象(假设没有派生类)
然后取转换后pClassRef指向的地址单元的内容(通过 * ),将其强制转换成DWORD赋给nClassIndex

感觉那个void*没有必要啊,直接
nClassIndex = (DWORD)(*m_pMapPtrToPtr)(pClassRef);

热点排行