2009-03-20 19 views
6

मैं कक्षा की सामग्री को संग्रहीत करने के लिए Boost.Serialization का उपयोग कर रहा हूं। सदस्य चर में से एक एक स्थिर std :: वेक्टर है।स्थिर सदस्य और बूस्ट क्रमबद्धता

संग्रहण और बहाली ठीक हो जाती है, लेकिन मुझे आशा है कि लाइब्रेरी स्थिर सदस्यों को केवल एक बार सहेज लेगी, ऐसा लगता है कि, फाइलसाइज द्वारा निर्णय लेते हुए, स्थिर सदस्य प्रत्येक संग्रहित उदाहरण के लिए पूरी तरह से सहेजे जाते हैं।

यह स्थिर वेक्टर के लिए सेट/गेटर्स का उपयोग करके और कक्षा के बाहर स्थिर वेक्टर को क्रमबद्ध करने के बजाय आसानी से घुमाया जाता है।

लेकिन मेरे पास एक स्वयं निहित वर्ग होगा। क्या केवल एक बार कक्षा की स्थैतिक सामग्री को संग्रहित करने के लिए एक साफ और आसान तरीका है?

उत्तर

2

कक्षा के सभी उदाहरणों को क्रमबद्ध करने से पहले स्थिर वेक्टर को क्रमबद्ध करें।

आप इस तरह वेक्टर को क्रमानुसार हैं:

template<class Archive> 
void serialize(Archive & ar, const unsigned int version) 
{ 
    ar & this->someVar; 
    ar & this->AnotherVar; 
    ar & staticVector; 
} 

तो यकीन है कि, स्थिर वेक्टर प्रत्येक उदाहरण के साथ धारावाहिक प्राप्त करता है।

क्या आपको किसी और स्पष्टीकरण की आवश्यकता है, अपने serialize फ़ंक्शन और इसे आमंत्रित करने वाले फ़ंक्शन को पोस्ट करें।

+1

मुझे नहीं लगता कि यह ईमानदार होने के लिए इतना 'निश्चित' है। चूंकि स्थैतिक उदाहरण प्रत्येक वर्ग के उदाहरण के लिए एक ही स्मृति पते पर रहता है, इसलिए मुझे उम्मीद थी कि लाइब्रेरी किसी भी तरह से इसे उठाएगी और फ़ाइल को हर बार वेक्टर लिखने के लिए पर्याप्त स्मार्ट नहीं होगी। – Pieter

+0

पहले वेक्टर को सीरियलाइज करना, और फिर सभी उदाहरणों, 'आसानी से घुमावदार' है, मैं बात कर रहा था, जैसा कि मैंने कहा था कि मैं अपनी कक्षा के लिए एक स्वयं निहित serialize() होगा ... लेकिन अगर वह नहीं कर सकता पहले वेक्टर को क्रमबद्ध करने के लिए किया जाना चाहिए, मैं निश्चित रूप से भी रहूंगा (इस तरह यह अब काम करता है ...) – Pieter

+0

यह सुनिश्चित है कि बूस्ट को सीरियलाइज करने के लिए आप जो कहते हैं उसे क्रमबद्ध करने के लिए सीरियलाइज करता है, इसकी स्मृति स्थिति के बावजूद, यह जंगली ढंग से नहीं जा सकता । किसी भी तरह से जादुई तरीके से काम करते हुए, स्थैतिक अनुभाग कहाँ संग्रहित किया जाएगा? शुरुआत में, अंत में, बीच में? एक तरीका 'धारावाहिक' जैसे ध्वज का उपयोग करना होगा। – arul

1

मैं Boost.Serialization साथ बहुत ही सीमित अनुभव है, इसलिए विचार करें क्या तदनुसार इस प्रकार है:

IIRC, उपचार आप अपने स्थिर सदस्य के लिए चाहते है क्या संकेत के साथ किया जाता है। तो शायद स्थिर सदस्य को एक सूचक को क्रमबद्ध करना काम करेगा।

स्व-आलोचना: मुझे यकीन नहीं है कि डी-सीरियलाइजिंग के दौरान इसे कैसे लागू किया जा सकता है।

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