簡體   English   中英

強制對sizeof運算符進行編譯時錯誤

[英]Force compile time error on sizeof operator

有時我們有一個POD結構,其sizeof具有序列化含義。 從我的PE解析器中,例如:

struct dos_header {
    unsigned short magic;
    unsigned short cblp;
    ...
    };

該結構是要從PE映像/到PE映像進行序列化的,因此它的sizeofifstream::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_headermemcpy是罰款,只要替代品平凡可復制。 如果那不是您要用於此類對象的序列化機制,是嗎? 提供一個處理所有(反)序列化的模板很容易,並且專門用於有時讀取較少的數據(並在此處根據一些其他上下文信息來計算variant的索引)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM