将地图结构转换为void指针和取消引用

时间:2015-05-22 09:00:42

标签: c++ dictionary casting void-pointers dereference

我一直在尝试将地图结构转换为void指针,反之亦然。

void addToMap(void *data){
// add some elements to the map
}

map<string, vector<myStruct> > myMap;
addToMap(&myMap);

我正在尝试将myMap发送到addToMap函数作为参数,并在函数内添加一些元素。如何将void参数推荐回地图结构?

我知道static_cast可用于取消引用void类型以了解类型。例如:

int* a = new int();
void* b = static_cast<void*>(a);
int* c = static_cast<int*>(b);

上面的代码片段可行,但我猜想不是这种情况。我已经为我的情况试过了,也许还有另外一招。

1 个答案:

答案 0 :(得分:2)

在addToMap函数中,可以将void指针强制转换回原始类型:

void addToMap(void *data){
    auto pmap = static_cast<map<string, vector<myStruct> >*>(data);
    pmap->insert(...);
}
  

static_cast还可以隐式执行所有允许的转换   (不仅是指向类的指针),而且还能够执行   与此相反。它可以:

     

从void *转换为任何指针类型。在这种情况下,它保证如果通过转换获得void *值   相同的指针类型,结果指针值是相同的。