2010-10-31 13 views
7

हमारे पास बहुत सारे देशी सी ++ वर्ग हैं जो पूरी तरह से बूस्ट :: क्रमबद्धता का उपयोग करके क्रमबद्ध हैं।प्रबंधित वर्ग के साथ boost :: serialization का उपयोग करना संभव है?

अब हम संपत्ति करने के लिए अपने सदस्य खेतों में से कुछ बदलना चाहते हैं, तो हम उन PropertyGrids में इस्तेमाल कर सकते हैं।

# 1:: error C2893: Failed to specialize function template 'boost::archive::text_oarchive &boost::archive::detail::interface_oarchive<Archive>::operator <<(T &)' d:\someAddress\someFile.cpp 58

# 2: error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const std::_Smanip<_Arg> &)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'boost::archive::text_oarchive' d:\someAddress\someFile.cpp 58

हम का एक बहुत है जब हम रेफरी दसवीं कक्षा के लिए कक्षा definiction बदल गया है, हम इन संकलन त्रुटियों की एक बड़ी संख्या मिल गया यहां छोटे वर्ग, इसलिए उनमें से प्रत्येक के लिए एक रैपर लिखना दर्द होगा!

ref class gps_position2 
{ 
public: 
    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 
     ar & seconds; 
    } 
public: 
    gps_position(){}; 
    gps_position(float s) 
    { 
     this->seconds = s; 
    } 

    property float seconds; 
}; 

यहाँ और मुख्य परीक्षा कोड है::

यहाँ नमूना वर्ग हम प्रयोग किया जाता है

int main() 
{ 
    std::ofstream ofs("out.txt"); 

    gps_position2 g(24.567f); 

    // save data to archive 
    { 
     boost::archive::text_oarchive oa(ofs); 
     // write class instance to archive 
     oa << g; 
    } 
    // ................ 
    return 0; 
} 

तो यह और भी कामयाब रहे वर्गों के साथ बढ़ावा :: क्रमबद्धता उपयोग करने के लिए संभव है?

संपादित करें:

हम यह करने के लिए वर्ग उपयोग कोड को बदलते हैं: तो

... 
    gps_position2^ g = gcnew gps_position2(24.567f); 
    ... 

हम केवल 1 त्रुटि मिलती है:

error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' D:\path\to\Boost\boostw\boost\archive\detail\check.hpp 60

+0

क्या समस्या तब भी होती है जब संपत्ति हटा दी जाती है (लेकिन कक्षा एक रेफरी कक्षा बनी हुई है)? – CiscoIPPhone

+2

क्या आप इसके बजाय .NET serialization का उपयोग कर सकते हैं? सी ++ और सी ++ - क्ली एक ही भाषा नहीं हैं। हालांकि वे कुछ हद तक अंतःक्रिया कर सकते हैं, सी ++ के लिए बढ़ावा है, सी ++ नहीं - क्ली। –

+0

@CiscolPPhone: हाँ, यह अभी भी बनी हुई है। @ मेरलीन मॉर्गन-ग्राहम: नहीं, हमें बढ़ावा देना होगा: मुख्य कोड (देशी सी ++ में) में क्रमबद्धता, यह कोड मुख्य कार्यक्रम के लिए केवल एक उपकरण है। – Sayyid

उत्तर

0

मुझे पता है तुम आपने कहा अपने सभी वर्गों को लपेटना नहीं चाहते हैं। हालांकि, सी ++/सीएलआई में अपने सभी वर्गों को लपेटने के बजाय, यह एक अप्रबंधित सी ++ डीएल विकसित करने और सभी प्रासंगिक कार्यों को उजागर करने के लायक हो सकता है। इसके बाद आप प्रबंधित कोड से अपने अप्रबंधित डीएल को कॉल करने के लिए P/Invoke का उपयोग कर सकते हैं (उदाहरण के लिए सी ++/सीएलआई)। यकीन नहीं है कि यह संभव होगा।

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