指针的向量C++提升序列化错误
Vector of Pointers C++ Boost Serialization Error
namespace featurelib
{
typedef vector<float*> HOG_List;
}
void saveFeaturesFile(vector<featurelib::HOG_List> &features, string filename){
ofstream out(filename.c_str());
stringstream ss;
boost::archive::binary_oarchive oa(ss);
oa << features;
out << ss.str();
out.close();
}
这是我的代码片段,我正在尝试使用 Boost 序列化将vector<featurelib::HOG_List>
保存到二进制文件中。但这会导致错误:
错误 C4308:负整数常量转换为无符号类型
但是当我删除指针时,
即typedef vector<float> HOG_List;
代码编译并工作正常。但是我需要找到一种方法来使用 Boost 将typedef vector<float*> HOG_List;
向量保存到二进制文件中
为什么你会有一个float*
的向量?
除此之外,由于对象跟踪:http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/special.html#objecttracking 和潜在的多态/锯齿,指针对于序列化是特殊的。
因为float
是基元类型的多态性在这里不是一个问题。但是,出于同样的原因,对象跟踪将变得笨拙,并且已被禁用:
默认情况下,从不跟踪由实现级别类序列化特征指定的基元数据类型。如果需要通过指针(例如用作引用计数的
long
)跟踪共享基元对象,则应将其包装在类/结构中,以便它是可识别的类型。更改 long 的实现级别的替代方案将影响整个程序中序列化的所有 longs - 可能不是人们想要的。
反过来,这意味着序列化库不知道如何处理float*
我建议你使用ptr_vector或者真正思考为什么你需要指针。
指针是什么意思?将它们替换为捕获语义的抽象。例如,如果float*
是/really/数组中第一个元素的地址,例如float[32]
则将HOG_List
重新定义为例如
typedef std::vector<std::vector<float> > HOG_List;
如果你必须迎合"无主"阵列,你可以凑合着用一些类似 GLS 的东西array_view
struct float_array_view {
float* base;
size_t n;
};
typedef std::vector<float_array_view> HOG_List;
请注意,在这种情况下,您必须定义一种反序列化它的方法(使用 boost::serialization::make_array 进行序列化)。因为图书馆不可能知道如何分配base*
。
另请参阅:
- 使用模板类提升序列化
- 无法使C++提升指针序列化正常工作(这将完成为反序列化分配的手动工作)
- 提升二进制序列化 - 固定长度错误的双数组
这里有更多可能相关的帖子:https://stackoverflow.com/search?q=user%3A85371+boost+make_array
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 提升序列化 1:73 的向后兼容性问题
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 如何反序列化数组?
- 如何使用提升序列化?
- 序列化多晶型接口
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?