将映射结构强制转换为void指针和解引用

Cast map structure to void pointer and dereference

本文关键字:void 指针 和解 引用 转换 映射 结构      更新时间:2023-10-16

我一直在尝试将映射结构转换为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*值是通过转换获得的相同的指针类型,得到的指针值是相同的。