[英]Force compile time error on sizeof operator
有时我们有一个POD结构,其sizeof
具有序列化含义。 从我的PE解析器中,例如:
struct dos_header {
unsigned short magic;
unsigned short cblp;
...
};
该结构是要从PE映像/到PE映像进行序列化的,因此它的sizeof
在ifstream::read
上具有含义。
对于非POD,这当然是无效的。 nt_header例如:
struct nt_header
{
std::uint32_t Signature;
file_header FileHeader;
std::variant<optional_header_32, optional_header_64> OptionalHeader;
}
从技术上讲,使用sizeof
进行序列化是有效的,但是在运行时却毫无意义,因为结构的大小取决于运行时。
当在此类中使用sizeof
时,是否有一种方法可以强制编译器生成编译时错误?
因此,如果我不小心在某处使用sizeof(nt_header)
,则编译器会警告我。
有回避的事实,即使使用没有得到nt_header
的memcpy
是罚款,只要替代品平凡可复制。 如果那不是您要用于此类对象的序列化机制,是吗? 提供一个处理所有(反)序列化的模板很容易,并且专门用于有时读取较少的数据(并在此处根据一些其他上下文信息来计算variant
的索引)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.