2010-11-25 13 views
14
class workflow { 

private: 
friend class boost::serialization::access; 

template<class Archive> 
void serialize(Archive & ar, const unsigned int version) 
{ 
    ar & tasks; 
    ar & ID; 
} 

vector<taskDescriptor> tasks; 
int ID; 

मैं बूस्ट पुस्तकालयों का उपयोग करके सदस्य "कार्यों" को क्रमबद्ध कैसे कर सकता हूं?मैं boost :: serialization के साथ std :: वेक्टर को क्रमबद्ध कैसे कर सकता हूं?

+0

इस कोड काम नहीं करता: स्पष्ट 'serialize' विधि किसी भी बढ़ावा हेडर की भी शामिल है के बिना (सार प्रयोजनों के लिए, आदि) लिखने के लिए? जो आपने दर्ज किया वह सही दिखता है। आप क्या त्रुटि प्राप्त कर रहे हैं? – robert

उत्तर

2

माफ करना, मैं का उपयोग कर

ar & BOOST_SERIALIZATION_NVP(tasks); 

tnx अलविदा

24
#include <boost/serialization/vector.hpp> 

इसके अलावा tutorial पढ़ हल किया।

+3

टेक्स्ट "वेक्टर" लिंक किए गए दस्तावेज़ों में नहीं होता है। –

9

बस इस प्रश्न के लिए एक सामान्य उदाहरण जोड़ने के लिए। आइए मान लें कि हम बिना किसी वर्ग या किसी भी चीज़ के वेक्टर को क्रमबद्ध करना चाहते हैं।

#include <iostream> 
#include <fstream> 

// include input and output archivers 
#include <boost/archive/text_oarchive.hpp> 
#include <boost/archive/text_iarchive.hpp> 

// include this header to serialize vectors 
#include <boost/serialization/vector.hpp> 

using namespace std; 



int main() 
{ 

    std::vector<double> v = {1,2,3.4, 5.6}; 

    // serialize vector 
    { 
    std::ofstream ofs("/tmp/copy.ser"); 
    boost::archive::text_oarchive oa(ofs); 
    oa & v; 
    } 

    std::vector<double> v2; 

    // load serialized vector into vector 2 
    { 
    std::ifstream ifs("/tmp/copy.ser"); 
    boost::archive::text_iarchive ia(ifs); 
    ia & v2; 
    } 

    // printout v2 values 
    for (auto &d: v2) { 
     std::cout << d << endl; 
    } 


    return 0; 
} 

जब से मैं क्यूटी का उपयोग करें, यह मेरा qmake समर्थक फ़ाइल की सामग्री है, लिंक और बढ़ावा फ़ाइलों को शामिल करने के लिए कैसे दिखा:

TEMPLATE = app 
CONFIG -= console 
CONFIG += c++14 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += main.cpp 


include(deployment.pri) 
qtcAddDeployment() 

INCLUDEPATH += /home/m/Downloads/boost_1_57_0 


unix:!macx: LIBS += -L/home/m/Downloads/boost_1_57_0/stage/lib -lboost_system 
unix:!macx: LIBS += -L/home/m/Downloads/boost_1_57_0/stage/lib -lboost_serialization 
3

मामले किसी में कभी आवश्यकता होगी इस तरह आप यह कर सकते हैं है

std::vector<Data> dataVec; 
int size; //you have explicitly add vector size 

template <class Archive> 
void serialize(Archive &ar, const unsigned int version) 
{ 
    if(Archive::is_loading::value) { 
     ar & size; 
     for(int i = 0; i < size; i++) { 
      Data dat; 
      ar & dat; 
      dataVec.push_back(dat); 
     } 
    } else { 
     size = dataVec.size(); 
     ar & size; 
     for(int i = 0; i < size; i++) { 
      ar & dataVec[i]; 
     } 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे