C++ 指针向量C++;Boost序列化错误 命名空间特性库 { typedef向量HOG_列表; } void savefeatures文件(矢量和特征,字符串文件名){ 流输出(filename.c_str()); 细流ss; boost::archive::binary_oarchive oa(ss); oa
为什么你会有一个向量C++ 指针向量C++;Boost序列化错误 命名空间特性库 { typedef向量HOG_列表; } void savefeatures文件(矢量和特征,字符串文件名){ 流输出(filename.c_str()); 细流ss; boost::archive::binary_oarchive oa(ss); oa,c++,serialization,boost,vector,C++,Serialization,Boost,Vector,为什么你会有一个向量float* 此外,由于对象跟踪和潜在的多态性/别名,指针对于序列化是特殊的 因为float是一种基本类型,所以这里不需要考虑多态性。但是,出于同样的原因,对象跟踪会变得笨拙,并且已被禁用: 默认情况下,从不跟踪由类序列化特征指定的基本体数据类型。如果希望通过指针跟踪共享基本体对象(例如用作引用计数的long),应将其包装在类/结构中,使其成为可识别的类型。更改long的实现级别的替代方案将影响整个程序中序列化的所有long-可能不是我们所希望的 这反过来意味着序列化库不知道
float*
此外,由于对象跟踪和潜在的多态性/别名,指针对于序列化是特殊的
因为float
是一种基本类型,所以这里不需要考虑多态性。但是,出于同样的原因,对象跟踪会变得笨拙,并且已被禁用:
默认情况下,从不跟踪由类序列化特征指定的基本体数据类型。如果希望通过指针跟踪共享基本体对象(例如用作引用计数的long
),应将其包装在类/结构中,使其成为可识别的类型。更改long的实现级别的替代方案将影响整个程序中序列化的所有long-可能不是我们所希望的
这反过来意味着序列化库不知道如何处理float*
我建议你使用一个ptr_向量,或者想想你为什么需要指针 指针的意思是什么?用一个能够捕捉语义的抽象来替换它们。例如,如果
float*
是数组中第一个元素的地址,比如float[32]
,那么将HOG_列表重新定义为
typedef vector<float> HOG_List;
注意在这种情况下,您必须定义一种反序列化方法(使用序列化)。因为库无法知道如何分配基*
另见:
- (这执行手动工作以分配反序列化)
这里有更多可能相关的帖子:添加了一些旧答案的链接,展示了如何在不同场景中序列化指针
typedef vector<float> HOG_List;
typedef std::vector<std::vector<float> > HOG_List;
struct float_array_view {
float* base;
size_t n;
};
typedef std::vector<float_array_view> HOG_List;