gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:35 25 4
gpt4 key购买 nike

tutorial for the boost serialization library 它说“序列化库检测到被序列化的对象何时是数组”,因此代码类似于 bus_stop * stops[10]; ar & stops;等同于使用 for 循环 for(i = 0; i < 10; ++i) { ar & stops[i]; } .

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

谢谢!

最佳答案

请注意 stops 不是指针,它是一个数组(包含 10 个指向 bus_stop 的指针,但那是无关紧要的)。

数组不是指针。有一个从数组指向数组第一个元素的指针的隐式转换一个 char 数组到需要一个 char * 参数的函数。但这种转换只会在需要时发生。

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

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 的类型是一个指针。

关于c++ - boost序列化库如何检测数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28899310/

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