boost序列化库如何检测数组?

时间:2015-03-06 13:00:05

标签: c++ serialization boost boost-serialization

tutorial for the boost serialization library 中它表示&#34;序列化库检测被序列化的对象何时是一个数组&#34;因此像bus_stop * stops[10]; ar & stops;这样的代码等同于使用for循环for(i = 0; i < 10; ++i) { ar & stops[i]; }

库如何在运行时确定指针stops指向的元素数量?或者甚至它实际上是一个数组而不是指向单个对象的指针?我还没有在源代码中找到任何提示。

谢谢!

1 个答案:

答案 0 :(得分:4)

请注意,stops不是指针,它是一个数组(指向bus_stop的10个指针,但这不相关)。

数组不是指针。存在从数组指针到数组的第一个元素的隐式转换,当您传递例如预期char参数的函数的char *数组。但只有在需要时才会进行转换。

如果函数通过引用获取数组转换(也称为数组到指针衰减)当然不会发生,因此参数可以绑定到参数。换句话说,它只需要一个合适的函数模板:

template <class T, std::size_t N>
void operator & (some_type lhs, T (&array)[N]);

这只会接受数组作为右侧参数。

请注意,如果您在原始代码中改为执行此操作:

bus_stop * stops[10];
bus_stop ** p_stops = stops; // decay happens here

ar & p_stops;

然后最后一行调用数组重载。 stops的类型是一个数组。 p_stops的类型是指针。