C++中的"非指针POD"类型

PPe*_*uin 7 c++ types

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

基本上我想引用"真正的"普通旧数据类型.我可以从内存中获取并存储在磁盘上的数据,并将其读回内存以供以后处理,因为它只不过是一组int,字符,枚举等.

如果类型是"真正的"普通旧数据类型,有没有办法在编译时进行测试?

相关:
C++中的POD类型是什么?
什么是聚合和POD以及它们如何/为何特殊?

Bar*_*icz 3

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

一般来说,C++ 缺乏通用序列化的功能。仅在指针上实现此自动操作只是冰山一角(如果一般情况下可能相当准确)-以通用方式也是不可能的。C++ 仍然没有反射,因此无法检查“每个成员”的某些条件。

现实的方法可能是:

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

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


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