[英]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.