【发布时间】:2020-04-24 21:11:42
【问题描述】:
我有一个包含两个不同std::multimap 的结构。我想做这样的事情,但是,我怎样才能取消我不知道数据类型的void*?
struct Data{
std::multimap<uint64_t,uint64_t, std::greater<uint64_t>> b;
std::multimap<uint64_t,uint64_t, std::less<uint64_t>> s;
};
Data data;
void do_something(bool c){
void* pointer;
uint64_t cumulative = 0;
if(c){
pointer = &data.b;
} else {
pointer = &data.s;
}
/* Here I don't know if pointer is
* std::multimap<uint64_t,uint64_t, std::greater<uint64_t>>
* or
* std::multimap<uint64_t,uint64_t, std::less<uint64_t>>
*/
for(auto it = (*pointer).begin(); it != (*pointer).end(); ++it){
cumulative += it->second;
}
}
谢谢
【问题讨论】:
-
不要通过
void*,写一个小函数模板做积累(或者看看std::accumulate是不是已经不适合你的需要了)。 -
std::variant或std::any -
"我怎样才能取消一个我不知道数据类型的 void*?"你没有。
标签: c++ void-pointers