在 sizeof 运算符上强制编译时错误
Force compile time error on sizeof operator
有时我们有一个 POD 结构,其sizeof
具有序列化目的的含义。从我的 PE 解析器中,从示例:
struct dos_header {
unsigned short magic;
unsigned short cblp;
...
};
此结构旨在从/序列化到 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)
,编译器会警告我。
无法
回避这样一个事实,即只要替代方案是微不足道的可复制的,就对memcpy
使用偶数nt_header
就可以了。 如果这不是您要用于此类对象的序列化机制...不要? 很容易提供一个处理所有(反(序列化的模板,并且专门用于有时读取较少的数据(并且,在这里,从其他一些上下文信息计算variant
的索引(。
相关文章:
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 如何在常量计算表达式中获取编译时错误?
- C++根据调用的构造函数强制编译时错误
- 使用 std::iterator_traits<> 时编译时错误不明确
- is_same和variadic模板编译时错误无效转换
- 私有运营商删除会触发 GCC 和 Clang 的编译时错误,但不会在 MSVC 上触发编译时错误
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- 引发编译时错误
- 为什么调用不明确的 ctor 时没有编译时错误?
- 在 sizeof 运算符上强制编译时错误
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 从Mac上的终端编译时C 错误
- 使用MINGW-W64使用-M32选项(32位代码)编译时错误
- C++线程错误 - 带有类参数的编译时错误
- 如果编译时间构量参数是错误的,则生成编译时错误
- 尝试调用指向成员函数的函数指针时出现编译时错误
- 编译时错误:删除了联合默认构造函数
- 初始化启动对象时出现编译时错误
- 如果在C++中将成员添加到类中,则会导致编译时错误的技术
- 如何设计可序列化类以使任何非序列化属性都会导致编译时错误