मैं boost :: program_options :: variables_map को क्रमबद्ध/deserialize कैसे करूं? मुझे पहले से कार्यान्वित धारावाहिक फ़ंक्शन नहीं मिल रहा है, और मुझे नहीं पता कि variables_map में कौन से फ़ंक्शंस का उपयोग मैं मानचित्र को निकालने और पुनः एकत्र करने के लिए कर सकता हूं।एक variables_map को क्रमबद्ध करना
उत्तर
ऐसा लगता है कि boost::program_options::variables_map
std::map
से निकला है ताकि आप इसके क्रमबद्धरण का उपयोग कर सकें (लेकिन बाद में चेतावनी देखें)। यदि एकमात्र शेष समस्या boost::any
मानों को क्रमबद्ध कर रही है तो इसमें शामिल हैं तो आप लगभग वहां हैं।
आप मनमानी बूस्ट को क्रमबद्ध नहीं कर सकते :: कोई भी क्योंकि यह वास्तव में नहीं जानता कि यह किस चीज को नियंत्रित करता है। हालांकि, यदि आप जानते हैं और अपने आवेदन द्वारा उपयोग किए जाने वाले प्रकारों की गणना कर सकते हैं, तो क्रमबद्धता संभव है। उदाहरण के लिए, यदि आप जानते हैं कि boost::any
मान हमेशा एक स्ट्रिंग या int है, तो ऐसा कुछ काम करना चाहिए।
क्रमानुसार करने (मूल्य एक boost::any
है):
if (value.type() == typeid(int)) {
ar << std::string("int");
ar << boost::any_cast<int>(value);
}
else if (value.type() == typeid(std::string)) {
ar << std::string("string");
ar << boost::any_cast<std::string>(value);
}
deserialize करने के लिए (मूल्य एक boost::any
है):
std::string type;
ar >> type;
if (type == "int") {
int x;
ar >> x;
value = x;
}
else if (type == "string") {
std::string x;
ar >> x;
value = x;
}
जाहिर है आप "पूर्णांक" से अधिक कुशल प्रकार टैग का उपयोग कर सकते हैं और " स्ट्रिंग "आपके क्रमिकरण धारा में, लेकिन यह आपको मूल विचार देता है।
संपादित करें: boost::archive
कॉन्स्ट संदर्भों के बारे में picky है इसलिए मैंने ऊपर लिखा जो काफी संकलित नहीं है। यह करता है, और यह एक बहुत ही सरल परीक्षण के लिए काम करता है:
enum {
TYPE_int,
TYPE_string,
};
namespace boost {
namespace serialization {
template<class Archive>
void save(Archive& ar, const boost::program_options::variable_value& value, unsigned int version) {
const boost::any& anyValue = value.value();
if (anyValue.type() == typeid(int)) {
int type = static_cast<int>(TYPE_int);
int typedValue = boost::any_cast<int>(anyValue);
ar << type << typedValue;
}
else if (anyValue.type() == typeid(std::string)) {
int type = static_cast<int>(TYPE_string);
std::string typedValue = boost::any_cast<std::string>(anyValue);
ar << type << typedValue;
}
}
template<class Archive>
void load(Archive& ar, boost::program_options::variable_value& value, unsigned int version) {
boost::any anyValue;
int type;
ar >> type;
if (type == TYPE_int) {
int x;
ar >> x;
anyValue = x;
}
else if (type == TYPE_string) {
std::string x;
ar >> x;
anyValue = x;
}
value = boost::program_options::variable_value(anyValue, false);
}
template<class Archive>
void serialize(Archive& ar, boost::program_options::variables_map& value, unsigned int version) {
// Probably works but is sloppy and dangerous. Would be better to
// deserialize into a temporary std::map and build a variables_map
// properly. Left as an exercise.
ar & static_cast<std::map<std::string, boost::program_options::variable_value>&>(value);
}
}
}
BOOST_SERIALIZATION_SPLIT_FREE(boost::program_options::variable_value);
इस कोड के साथ कुछ संभावित समस्याएं हैं। variable_value
के लिए पहला load()
में है - अंतिम विवरण को boost::any
से बनाता है और मुझे पूरा यकीन नहीं था कि bool
तर्क किया गया था (आपको bool
का प्रतिनिधित्व करने वाले किसी भी क्रम को क्रमबद्ध करने की आवश्यकता हो सकती है)। दूसरी बात यह है कि आप variables_map
को std::map
संदर्भ और deserializing पर कास्टिंग करके लगातार variables_map
प्राप्त कर सकते हैं या नहीं। std::map
पर वास्तविक std::map
में deserialize करना सुरक्षित होगा और फिर std::map
सामग्री से variables_map
बनाएं।
क्या उत्तर है, इतना व्यापक ... +1। –
- 1. घटनाओं को क्रमबद्ध करना
- 2. एक Tdws प्रोग्राम को क्रमबद्ध करना
- 3. फ़ंक्शन ऑब्जेक्ट्स को क्रमबद्ध करना
- 4. QGraphicsScene सामग्री को क्रमबद्ध करना
- 5. एक कस्टम प्रकार की एक सूची को क्रमबद्ध करना
- 6. JSON को दशमलव को क्रमबद्ध करना, कैसे गोल करना है?
- 7. PHP चर के एक जेएस क्रमबद्ध स्ट्रिंग को अनसुलझा करना
- 8. एक ऑब्जेक्ट को क्रमबद्ध करना जिसमें गैर-क्रमिक अभिभावक वर्ग
- 9. मूल्य से एक शब्दकोश को क्रमबद्ध करना कुंजी
- 10. प्रोटोबफ-नेट: खाली सूची को क्रमबद्ध करना
- 11. रेल: डेटाबेस में वस्तुओं को क्रमबद्ध करना?
- 12. निजी सदस्य डेटा को क्रमबद्ध करना
- 13. एक ऑब्जेक्ट को एक क्रमबद्ध ऐरे
- 14. किसी अज्ञात वर्ग को क्रमबद्ध करना और पुनर्स्थापित करना
- 15. क्रमबद्ध एक और एक
- 16. एक php सरणी को क्रमबद्ध रूप से
- 17. क्रमबद्ध एक सूची वर्णानुक्रम
- 18. क्रमबद्ध एक और सरणी
- 19. जावा: एक अपरिवर्तनीय सूची को क्रमबद्ध करें
- 20. एक साथ कई रूपों को क्रमबद्ध करें?
- 21. jqueryui - एक क्रमबद्ध
- 22. एक (क्रमबद्ध) JTable
- 23. जेएसओएन को पाइथन बाइटस्ट्रिंग को क्रमबद्ध करना, क्रमिक वर्ण मानों को संरक्षित करना
- 24. अनुरोध को क्रमबद्ध करना। किसी शब्दकोश या कुछ
- 25. लगातार अंक के बीच न्यूनतम यूक्लिडियन दूरी को क्रमबद्ध करना
- 26. न्यूनतम तत्व तुलना के साथ 5 तत्वों को क्रमबद्ध करना
- 27. क्या सी # कोड ब्लॉक को क्रमबद्ध करना संभव है?
- 28. एक बंदरगाह तालिका में एक उपखंड को क्रमबद्ध करना पदानुक्रमित-डेटा संरचना
- 29. जेएसओएन को क्रमबद्ध करते समय आउटऑफमेमरी अपवाद प्राप्त करना?
- 30. क्या कच्चे बूस्ट :: संस्करण को क्रमबद्ध करना सुरक्षित है?
मैंने अपना खुद का क्रमबद्धता लिखा है, लेकिन इसे boost_value में किसी भी को बढ़ावा देने में परेशानी हो रही है। – Jayen
ठीक है, मैं हार मानता हूं। मेरा प्रयास यहां है: http://pastebin.com/jBkA3G9x – Jayen
इसके बारे में क्या: http://pastebin.com/jBkA3G9x/ –