gpt4 book ai didi

c++ - 将对象转换为 char* 以保存/加载

转载 作者:行者123 更新时间:2023-11-28 03:52:16 24 4
gpt4 key购买 nike

我有一个小问题。

我正在编写一个加载/保存函数,用于从保存的文件中获取纯几何数据。所涉及的对象是从其中包含大量数据的类实例化而来的,但它们都只使用普通的旧数据,没有指针/分配的内存等。

是否可以将文件加载到分配的 char* 数组中,将其类型转换为 Geometry* ,并安全地期望所有内容都不会被打乱,假设我在保存时做了同样的反向操作(将数组类型转换为 char*并将其写入文件)?

如果我尝试访问由 char* 指针、int* 或任何其他指针类型指向的数组,我需要考虑什么特殊事项吗?

最佳答案

Is it possible to load the file into an allocated char* array, typecast that to, say, Geometry*

这是可能的。我做过类似的工作。我使用了两个链接的 static_cast 来做到这一点,如:

char *buffer;
//..
Geometry *g = static_cast<Geometry *>(static_cast<void*>(buffer));

//reverse
buffer = static_cast<char*>(static_cast<void*>(g));

由于两个链接的static_cast看起来很麻烦,所以我写了这个函数模板:

template<class To, class From>
To any_cast(From v)
{
return static_cast<To>(static_cast<void*>(v));
}

然后将其用作,

Geometry *g = any_cast<Geometry *>(buffer);

//reverse
buffer = any_cast<char*>(g);

查看此主题:

Why do we have reinterpret_cast in C++ when two chained static_cast can do its job?

关于c++ - 将对象转换为 char* 以保存/加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055636/

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