boost::ptr_vector
örneğini hububat kullanarak serileştirmek mümkün mü? Öyleyse nasıl?Nasıl bir boost serileştirilir :: ptr_vector tahıl kullanarak?
cevap
Bu kesinlikle mümkündür. Böyle arşiv ve işaretçi türüne dış save()
ve load()
şablon işlevleri oluşturabilirsiniz:
#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;
}
Bu varsayılan-constructible ve şimdiden tek tek seri hale getirilebilir herhangi içerdiği tipiyle çalışmalıdır.
.... ve "save" ve "load" için aşırı yüklenmeler _associated namespace_ (ADF) 'de bulunabilir. Bu sürümün yükte oldukça komik bir inşaat semantiğine sahip olduğunu ekleyebilirim. "Tamam", çünkü ptr_vectors zaten – sehe
@sehe gibi taklit elemanlar alamıyor, komik yük semantikleri ile bunun daha verimli bir şekilde yapılabileceği anlamına mı geliyor? –
Aslında, hayır, iyi görünüyor. – sehe
- 1. Boost :: ptr_vector öğesinin sahipliğini nasıl transfer edersiniz?
- 2. Boost :: ptr_vector, alttaki nesneleri nasıl kopyalar?
- 3. Java'da AVRO Kullanarak Bir Tarih Nasıl Serileştirilir
- 4. Paylaşılan/zayıf işaretçiler nasıl serileştirilir?
- 5. ServiceStack JsonSerializer kullanarak ExpandoObject nasıl serileştirilir?
- 6. Json4s kullanarak AST'ye nesne nasıl serileştirilir?
- 7. Bir Sözlük <string, object> XML'e nasıl serileştirilir/serileştirilir
- 8. XML Nasıl 'Type' Serileştirilir
- 9. AutoBean'da (GWT) bir liste nasıl serileştirilir?
- 10. Java'da genel bir sınıf nasıl serileştirilir?
- 11. VersionedEntity nasıl düzgün bir şekilde serileştirilir?
- 12. Jackson ile LocalDateTime nasıl serileştirilir?
- 13. Qt kullanarak boost :: shared_ptr bir sinyal/yuvada
- 14. C++: boost :: property_tree kullanarak nasıl bir dizi oluşturulur?
- 15. Django.rest_framework: Bire birçok kişiye nasıl serileştirilir?
- 16. ScalaPB ile 'oneof' kullanan bir protobuf mesaj nasıl serileştirilir/kaldırılır?
- 17. Boost
- 18. Yuvalanmış ObjectId, Jackson ile String'e nasıl serileştirilir?
- 19. Liste içeriği Jackson ile düz bir JSON nesnesine nasıl serileştirilir?
- 20. System.Net.IPAdres özelliği dahil olan bir sınıf nasıl serileştirilir?
- 21. Boost :: asio ve boost :: thread
- 22. Boost :: Sınırlayıcı olarak tüm dizeyi kullanarak bölme
- 23. Async Boost Asio kullanarak dosya tanıtıcıda bekle
- 24. Boost :: serialization kullanarak XML'e seri hale getirme
- 25. boost :: tokenizer vs boost :: bölme
- 26. Boost Spirit'de bir işlevden beklenti_failesi nasıl atılır?
- 27. Boost ile nasıl kritik bir bölüm oluştururum?
- 28. boost :: boost :: throw_exception nedeniyle derleme yapılamıyor ::
- 29. boost :: function and boost :: bind work
- 30. Boost, VS2005
'ptr_vector' ile yakından tanıdık değilim, ancak aslında' std :: vector 'adlı sargıya benziyor. tahıl ham işaretçileri desteklemez, bu yüzden olası bir "ptr_vector" serisini hububat veya önemli bir geçici çözümde önemli değişiklikler olmadan serileştirmenin mümkün olmadığını düşünüyorum. –
Azoth