"非指针POD"用C ++输入

时间:2018-01-24 14:51:31

标签: c++ types

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

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

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

相关


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

1 个答案:

答案 0 :(得分:2)

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

通常,C ++缺乏通用序列化的功能。仅仅根据指针进行自动化只是冰山一角(如果可能一般非常准确) - 它也是impossible的通用方式。 C ++仍然没有反射,因此没有办法检查“每个成员”的某些条件。

现实的方法可能是:

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

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

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