gpt4 book ai didi

c++ - 将 multimap 转换为 void 指针,然后返回 multimap

转载 作者:行者123 更新时间:2023-12-02 01:26:27 27 4
gpt4 key购买 nike

我需要将多重映射转换为空缓冲区,并将其传递到应重建多重映射的函数中。

我知道有一种简单的方法可以简单地传递多重映射,但我需要通过 void 指针来完成,所以请查看下面的逻辑:

using namespace std;

void reconstruct_mm(void *ptr, size_t len) {

multimap<int, int> *mm = ptr;
mm = (multimap<<int, int>*>malloc(len));

*** print the following 10, 20, 30...

}

int main (void) {

void *buffer;
size_t buffer_len = 0;

multimap <int, int> m;

// fill in multimap with values
m.insert(pair <int, int> (1, 10);
m.insert(pair <int, int> (2, 20);
m.insert(pair <int, int> (3, 30);

// from this point I need your help, I only wrote logic what I expect from the program.

buffer = &mm;
buffer_len = sizeof(mm);

reconstruct_mm(buffer, buffer_len);

}

提前谢谢您!

最佳答案

从技术上讲,您可以使用 static_cast ,根本没有任何内存分配:

void reconstruct_mm(void *ptr/* Next argument unneeded:, size_t len*/) {

multimap<int, int> *mm = static_cast<multimap<int, int> *>(ptr);

// Use here mm as a multimap pointer regularly
cout << mm->size() << '\n';

}

我能想到的唯一合法的情况是,如果您受到某些遗留代码的约束,例如,需要使用 void * 接口(interface)进行回调之类的代码。如果情况并非如此,请考虑从一开始就避免使用 void *

关于c++ - 将 multimap 转换为 void 指针,然后返回 multimap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58341732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com