c++ - "Non-pointer POD"C++ 类型

标签 c++ types

是否有一个类/结构的术语既简单又标准布局但也没有指针成员?

基本上我想指的是“真正的”普通旧数据类型。我可以从内存中获取数据并将其存储在磁盘上,然后读回内存以供以后处理,因为它只不过是整数、字符、枚举等的集合。

有没有办法在编译时测试一个类型是否是“真正的”普通旧数据类型?

相关:
What are POD types in C++?
What are Aggregates and PODs and how/why are they special?

最佳答案

这可能取决于结构的语义。我可以想象一个具有 int 字段的结构是一些 volatile 临时数据存储(或缓存)的键。你仍然不应该序列化那些,但你需要关于该结构的内部知识才能告诉 1

一般来说,C++ 缺乏泛型序列化的特性。仅在指针上自动执行此操作只是冰山一角(如果总体上可能非常准确)-它也是 impossible以一种通用的方式。 C++ 仍然没有反射,因此无法检查“每个成员”的某些条件。

现实的方法可能是:

  • 在构建之前预处理类源以扫描指针
  • 用一些跟踪类型的宏声明要序列化的所有结构
  • 可以对一组已知的字段名称实现常规模板检查

不过,所有这些都有其局限性,再加上我之前的保留意见,我不确定它们的实用性如何。


1 这当然是双向的;指针可用于存储相对偏移量,因此可完美序列化。

关于c++ - "Non-pointer POD"C++ 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425324/

相关文章:

c - 基于(堆栈/注册)的虚拟机如何处理不同的数据类型

c++ - 将 float 转换为 float/int 后返回不同的结果

c++ - 这个 C++ 代码异常安全吗?

c++ - 如何限制第 3 方流程必须完成的时间?

c++ - 在 Dev C++ 中安装 Curl

c++ - 相同代码的不同版本

c++ - 静态库中的 MFC CSocket

c# - 强制泛型类型参数

c++ - 使用精确大小的整数c++

C# 和 Oracle 数字数据类型