シリアルを使用してboost::ptr_vector
インスタンスをシリアル化することはできますか?もしそうなら、どうですか?シリアルを使用してboost :: ptr_vectorをシリアル化する方法は?
5
A
答えて
3
間違いなく可能です。あなたはこのようなアーカイブとポインタタイプの外部save()
とload()
テンプレート関数を作成することができます
#include <iostream>
#include <sstream>
#include <boost/ptr_container/ptr_vector.hpp>
#include <cereal/archives/binary.hpp>
#include <cereal/types/string.hpp>
// Sample serializable object.
struct MyRecord {
std::string s_;
MyRecord(const std::string s = std::string())
: s_(s) {
}
template <class Archive>
void serialize(Archive& ar) {
ar(s_);
}
};
// External save function for boost::ptr_vector<T>.
template<class Archive, class T>
void save(Archive& ar, const boost::ptr_vector<T>& pv) {
ar(pv.size());
for (const auto& element : pv)
ar(element);
}
// External load function for boost::ptr_vector<T>.
template<class Archive, class T>
void load(Archive& ar, boost::ptr_vector<T>& pv) {
size_t n;
ar(n);
pv.reserve(n);
for (size_t i = 0; i < n; ++i) {
pv.push_back(new T);
ar(pv.back());
}
}
int main() {
// Serialize a boost::ptr_vector to a buffer.
std::ostringstream os;
{
boost::ptr_vector<MyRecord> saved;
saved.push_back(new MyRecord("how"));
saved.push_back(new MyRecord("now"));
saved.push_back(new MyRecord("brown"));
saved.push_back(new MyRecord("cow"));
cereal::BinaryOutputArchive oa(os);
oa(saved);
}
// Serialize from the buffer.
boost::ptr_vector<MyRecord> loaded;
{
std::istringstream is(os.str());
cereal::BinaryInputArchive ia(is);
ia(loaded);
}
for (const auto& element : loaded)
std::cout << element.s_ << '\n';
return 0;
}
これがデフォルト-構成可能で、すでに個別に直列化可能である任意の含まれているタイプで動作するはずです。
関連する問題
- 1. XmlSerializerを使用して 'System.Numerics.Complex'をシリアル化する方法は?
- 2. Linqを使用してxmlを逆シリアル化する方法は?
- 3. DataContractSerializerを使用してWCFメッセージをシリアル化する方法は?
- 4. ServiceStack JsonSerializerを使用してExpandoObjectをシリアル化する方法は?
- 5. GenericXmlSecurityTokenを格納/逆シリアル化/シリアル化する方法は?
- 6. カスタムXMLシリアル化メソッド内からデフォルトのXMLシリアル化を使用する方法
- 7. RestKitを使用してマルチレベルJSONをシリアル化する方法
- 8. Newtonsoft.Jsonを使用してJsonArrayを逆シリアル化する方法
- 9. 斧を使用してパラメータをシリアル化する方法
- 10. WCF:DataContractSerializerを使用してDataTableをシリアル化する方法
- 11. XMLシリアル化を使用して親ノードなしでコレクションをシリアル化する
- 12. django rest_frameworkを使用してシリアル化する方法スルーモデルManyToManyFields
- 13. JSONを使用してシリアル化
- 14. NodeSeqをシリアル化する方法は?
- 15. Scala Arrayをシリアル化する方法は?
- 16. pysparkパイプラインオブジェクトをシリアル化する方法は?
- 17. グラフをシリアル化する方法は?
- 18. dateutil.tz.tzlocalオブジェクトをシリアル化する方法は?
- 19. Jacksonを使用してリストをリストとしてシリアル化する方法
- 20. ScalaとPlay Frameworkを使用してJsonのシリアル化をカスタマイズする方法は?
- 21. Jacksonを使用してAvroファイルを逆シリアル化する方法は?
- 22. Serdeを使用して逆シリアル化中にフィールドを変換する方法は?
- 23. Protobuf-Netを使用して.Net例外をシリアル化する方法は?
- 24. GSONを使用してマップのマップをシリアル化する方法は?
- 25. gsonを使用してDate to longをシリアル化する方法は?
- 26. jacksonを使用してjsonリストをPOJOにシリアル化する方法は?
- 27. jacksonを使用して過渡フィールドをシリアル化する方法は?
- 28. JQueryを使用してMVCからJSONを逆シリアル化する方法は?
- 29. jqGrid、マルチセレクション、およびSpringを使用してデータをシリアル化する方法は?
- 30. JacksonのobjectMapperを使用してインターフェースフィールドを逆シリアル化する方法は?
私は 'ptr_vector'に精通していませんが、基本的に' std :: vector 'のラッパーのようです。シリアルは未処理のポインタをサポートしていないので、シリアルや重大な回避策を大幅に変更することなく 'ptr_vector'をシリアル化することはできないでしょう。 –
Azoth