[英]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;
該代碼可以編譯並正常工作。 但是,我需要找到一種方法來保存typedef vector<float*> HOG_List;
使用Boost轉換為二進制文件
為什么會有一個float*
向量?
除此之外,由於對象跟蹤,指針是序列化的特殊對象: http : //www.boost.org/doc/libs/1_60_0/libs/serialization/doc/special.html#objecttracking和潛在的多態性/別名。
因為float
是原始類型的多態性,所以在這里不必擔心。 但是,出於相同的原因,對象跟蹤將變得笨拙並且已被禁用:
默認情況下,從不跟蹤由實現級別類序列化特征指定的原始數據類型。 如果希望通過指針跟蹤共享的原始對象(例如
long
用作引用計數的long
),則應將其包裝在類/結構中,以便它是可識別的類型。 更改long的實現級別的另一種選擇會影響整個程序中序列化的所有long-可能不是預期的。
反過來,這意味着序列化庫不知道如何處理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*
。
也可以看看:
這里還有更多可能相關的帖子: https : //stackoverflow.com/search?q=user%3A85371+boost+make_array
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.