将映射结构强制转换为void指针和解引用
Cast map structure to void pointer and dereference
我一直在尝试将映射结构转换为void指针,反之亦然。
void addToMap(void *data){
// add some elements to the map
}
map<string, vector<myStruct> > myMap;
addToMap(&myMap);
我试图将myMap发送到addToMap函数作为参数,并在函数内添加一些元素。如何将void形参转换回map结构?
我知道可以使用static_cast来解引用void类型以了解类型。例如:
int* a = new int();
void* b = static_cast<void*>(a);
int* c = static_cast<int*>(b);
上面的代码片段可以工作,但我想在这种情况下不行。我已经在我的案例中尝试过了,也许必须有另一个技巧。
在addToMap函数中,可以将void指针强制转换回原始类型:
void addToMap(void *data){
auto pmap = static_cast<map<string, vector<myStruct> >*>(data);
pmap->insert(...);
}
static_cast还能够隐式地执行所有允许的转换(不仅仅是那些带有类指针的指针),并且还能够执行与这些相反。它可以:
从void*转换为任何指针类型。在本例中,它保证如果void*值是通过转换获得的相同的指针类型,得到的指针值是相同的。
相关文章:
- 如何在 C++ 中将 void 函数传递给 void 指针
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- C++为 void 指针分配一个字符串
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 取消引用 void 指针以将值分配给结构
- C 与 C++,处理 void** 指针
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 用非零值初始化void指针的正确(或最安全)方法
- 将 void 指针分配给另一个 void 指针
- c ++ 我是否需要手动删除指向另一个具体类型的 void* 指针?
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何将 std::string 赋回作为 <char>void* 指针传递的 std::vector.data()?
- 将指针传递到结构,与传递 void 指针并强制转换为结构
- 如何在void*指针下检查运行时类型(允许简单类型,没有基类)?
- 用于初始化结构的 void 指针强制转换
- 使用 void 指针:void **ptr.. 如何修改共享内存的值?
- 访问由 void 指针引用的结构的成员
- 你不能在 void 指针上使用指针算法,那么 void 指针数组是如何工作的呢?
- 如何警告 C 中 void 指针上的参数不兼容的类型
- 指向类模板方法的 void 指针的向量