我有一系列数据结构,应该使用boost :: serialization从一层传递到另一层.例如
struct DataType1
{
std::string field1;
std::string field2;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & field1;
ar & field2;
}
};
Run Code Online (Sandbox Code Playgroud)
我想写这个单元测试,只是为了确保我没有错过一些字段(有很多结构和字段).
问题是,如果我在结构中添加新字段(我肯定会这样做)而忘记更新单元测试,则单元测试不会覆盖此字段.
我的问题是:如何检测结构(或类)是否已更改.我的想法是使用static_assert(sizeof(DataType1)== HARD_CODED_VALUE)但它在不同的编译器,平台(x64,x86)和配置(发布,调试)中受到结构大小差异的影响.
有什么好主意如何处理这个?
在类定义中添加注释以提醒您在添加成员时必须调整序列化器。计算机能为您做的事情是有限的——这就是代码审查很重要的原因。让其他程序员审查任何补丁,拥有一组严格的测试用例,并希望得到最好的结果。
我确信您可以编写一个 clang 插件,该插件将确保特定方法引用结构的每个成员,但是您真的需要这个吗?您可以投入时间吗?
也就是说,如果你尝试将尽可能多的工作转移到计算机上,你会获得加分。即使static_assert是一招也是好招。如果您使用一组#ifdef针对特定 ABI 和经常构建的架构的 s 来保护它,它可能会做得很好。
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |