gpt4 book ai didi

c++ - 添加数据成员以进行 boost 序列化时进行跟踪

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:11 30 4
gpt4 key购买 nike

我正在寻找任何策略,以便知道何时有人在某些已经序列化的类中添加数据成员而忘记序列化它。

例如,在下面的类中添加了 bar 但未在访问结构中序列化。

// In implementation library
class A {
public:
struct access;
A(float f, int b) : foo(f), bar(b) {}
private:
float foo;
int bar; // A user just 'added' bar data member
};

// In serialization library
struct A::access {
template <class Archive>
static void serialize(Archive &ar, A &a, const unsigned int) {
ar & BOOST_SERIALIZATION_NVP(a.foo);
// bar serialization is missing here but compiler does not complain
}
};

Live code

比如编译器在编译序列化库的时候会不会报错?

目前,我的想法是添加一些单元测试,以判断序列化/反序列化场景是否会给出正确的行为。

我正在寻找更聪明、更简单的方法,而不需要复杂的反射技术(我不能在我的实现库中使用 boost)。

最佳答案

我认为单元测试才是真正的出路。

在没有反射语言设施的情况下,没有万无一失的方法来检查你想要什么¹。此外,您还可以在序列化方法中静态断言 sizeof(MyClass)。当然,这不会检测到保持网络类大小不变的变化,但总比没有好。

单元测试通过关注相关事物来回避所有问题。老实说,我认为任何更多的结构验证都应该成为代码审查的一部分。

Idea You could think about adding custom rules to any static-analysis tools you may have (in the future). Static analysis features usually have rich "reflection" information


¹ 除了语义问题(并非每个字段都需要首先序列化)

关于c++ - 添加数据成员以进行 boost 序列化时进行跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33010387/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com