Ôîðóì ïðîãðàììèñòîâ, êîìïüþòåðíûé ôîðóì, êèáåðôîðóì
Íàøè ñòðàíèöû
Boost C++
Âîéòè
Ðåãèñòðàöèÿ
Âîññòàíîâèòü ïàðîëü
 
Ðåéòèíã 4.67/6: Ðåéòèíã òåìû: ãîëîñîâ - 6, ñðåäíÿÿ îöåíêà - 4.67
Suares
0 / 0 / 0
Ðåãèñòðàöèÿ: 28.02.2013
Ñîîáùåíèé: 106
1

Ñåðèàëèçàöèÿ CString

17.02.2014, 16:52. Ïðîñìîòðîâ 1046. Îòâåòîâ 5
Ìåòêè íåò (Âñå ìåòêè)

Ó ìåíÿ åñòü ñòðóêòóðà Person:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
struct Person
{
    //BOOST_SERIALIZATION_SPLIT_MEMBER();
 
public:
    Person::Person(const WTL::CString& name = "", const WTL::CString& num = "", const WTL::CString& birthday = "", const WTL::CString& address = "")
        : _name(name), _phoneNumber(num), _birthday(birthday), _address(address)
    {
    }
 
    WTL::CString _name;
    WTL::CString _phoneNumber;
    WTL::CString _birthday;
    WTL::CString _address;
 
private:
    friend class boost::serialization::access;
 
    template<typename Archive>
    void serialize(Archive& ar, Person& p, const unsigned int version)
    {
        split_free(ar, p._name, version);
        split_free(ar, p._phoneNumber, version);
        split_free(ar, p._birthday, version);
        split_free(ar, p._address, version);
    }
};
Íå ìîãó ðàçîáðàòüñÿ ñ ôóíêöèåé serialize äëÿ CString. Âîò èìåííî íóæåí CString. Êàê îíà äîæíà áûòü ðåàëèçîâàíà äëÿ CString?
Äàëåå â êëàññå ContactList ÿ õî÷ó çàïèñàòü â ôàéë è ñ÷èòàòü ñ íåãî ìíîæåñòâî êîíòàêòîâ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class ContactList
{
public:
    ContactList();
    ~ContactList();
 
    void LoadPerons();
    void SavePersons();
 
    void AddPerson(const Person& p);
    void DeletePerson(const int id);
 
    Person GetPerson(size_t id);
    size_t GetSize() const;
 
private:
    std::vector<Person> _list;
};
 
void ContactList::LoadPerons()
{
    std::ifstream file("ContactList.txt");
    boost::archive::text_iarchive ia(file);
 
    ia >> _list;
}
 
void ContactList::SavePersons()
{
    std::ofstream file("ContactList.txt");
    boost::archive::text_oarchive oa(file);
 
    oa << _list;
}
ß õîòÿ áû ÷òî-òî ïðàâèëüíî äåëàþ?
0
Similar
Ýêñïåðò
41792 / 34177 / 6122
Ðåãèñòðàöèÿ: 12.04.2006
Ñîîáùåíèé: 57,940
17.02.2014, 16:52
Îòâåòû ñ ãîòîâûìè ðåøåíèÿìè:

Îøèáêà ïðåîáðàçîâàíèÿ wsmatch â CString
Ñ èñïîëüçîâàíèåì áèáëèîòåêè boost íàïèñàë ôóíêöèþ ïîëó÷åíèÿ èìåíè õîñòà ïî óðë. Êîìïèëèðóåòñÿ...

Ñåðèàëèçàöèÿ map-a
Ïîäñêàæèòå, êàê ìîæíî ñåðèàëèçîâàòü map&lt;char*, int&gt;? Åñòü ïðèìåð äëÿ &lt;int,int&gt;, íî òóò íå èäåò...

Ñåðèàëèçàöèÿ äàííûõ
Âñåì, ïðèâåò. Èíòåðåñóåò íåñêîëüêî âîïðîñîâ ïî ñåðèàëèçàöèè äàííûõ ÷åðåç boost: 1. Ìîæíî ëè...

Ñåðèàëèçàöèÿ ñïèñêà óêàçàòåëåé
Äîáðîãî âðåìåíè ñóòîê! Âîçíèê âîïðîñ ñ ñåðèàëèçàöèåé ñïèñêà óêàçàòåëåé. Èìååòñÿ êëàññ, êîòîðûé...

Ñåðèàëèçàöèÿ óêàçàòåëåé íà ïðèìèòèâíûå òèïû
Ïðîøó ïîëüçîâàòåëåé ïàêåòà Serialization ïîäñêàçàòü, ÷òî òðåáóåòñÿ äîáàâèòü â êîä, ÷òîáû ìîæíî áûëî...

5
Avazart
Ýêñïåðò Ñ++
7791 / 5691 / 560
Ðåãèñòðàöèÿ: 10.12.2010
Ñîîáùåíèé: 25,918
Çàïèñåé â áëîãå: 17
07.10.2014, 00:00 2
Õîòåë ñîçäàòü ñâîþ òåìó, íî óâèäåë ÷òî åñòü ïîõîæàÿ ïî ýòîìó ïîäíèìó ...

Öèòàòà Ñîîáùåíèå îò Suares Ïîñìîòðåòü ñîîáùåíèå
Âîò èìåííî íóæåí CString.
Ìîé âîïðîñ â êîíêðåòíîé ôîðìóëèðîâêå çâó÷èò òàê êàê ñåðèàëèçîâàòü UnicodeString- òèï ñòðîêè èç VCL (C++Builder).
Òàêîé æå âîïðîñ ìîæíî çàäàòü è äëÿ QString èç Qt èëè äðóãîãî òèïà êîòîðûé ïðåäîñòàâëÿåòñÿ òåìè èëè èíûìè áèáëèîòåêàìè èëè ôðåéìâîðêàìè è â êîä êîòîðîãî ìû íå ìîæåì âìåøèâàòü ïî î÷åâèäíûì ïðè÷èíàì.

Åäèíñòâåííîå ÷òî ÿ íàøåë http://www.boost.org/doc/libs/1_56_0...trusiveversion
C++
1
2
3
4
5
6
7
8
9
10
11
namespace boost
{
    namespace serialization
    {
         template<class Archive>
         void serialize(Archive &ar,UnicodeString us,const unsigned int version)
         {
             /* ar & us; */
         }
    }
}
Íî íå ïîíÿòíî êàêèì ìàãè÷åñêèì îáðàçîì ìîæíî îáúåäèíèòü ÷òåíèå è çàïèñü (èíà÷å áû áûëà âîçìîæíîñòü ïåðåâåñòè UnicodeString ê ïðèìåðó â std::wstring ñåðèàëèçàöèÿ êîòîðîãî èìååòñÿ)
0
ForEveR
 àñòðàëå
Ýêñïåðò Ñ++
8002 / 4760 / 653
Ðåãèñòðàöèÿ: 24.06.2010
Ñîîáùåíèé: 10,547
Çàâåðøåííûå òåñòû: 3
07.10.2014, 11:17 3
Avazart, Íó. save/load íèêòî íå ìåøàåò ðåàëèçîâàòü ñâîáîäíûìè, íåîáÿçàòåëåí îáùèé serialize.
Èëè æå íàïèñàòü serialize, â êîòîðîì âûçâàòü
C++
1
boost::serialization::split_free
è îòäåëüíî save/load, êàê ðåàëèçîâàíî äîïóñòèì â ñåðèàëèçàöèè äëÿ std::complex.

Äîáàâëåíî ÷åðåç 5 ìèíóò
Ãðóáî ãîâîðÿ.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace boost { namespace serialization {
 
template<typename Archive, typename T>
void serialize(Archive& ar, T& t, const unsigned int version)
{
    boost::serialization::split_free(ar, t, version);
}
 
template<typename Archive, typename T>
void save(Archive& ar, const T& t, const unsigned int)
{
   ar << t;
}
 
template<typename Archive, typename T>
void load(Archive& ar, T& t, const unsigned int)
{
   ar >> t;
}
 
}
 
}
+ âîçìîæíî ïðèäåòñÿ ïåðåîïðåäåëèòü íåêîòîðûå traits.
0
Avazart
Ýêñïåðò Ñ++
7791 / 5691 / 560
Ðåãèñòðàöèÿ: 10.12.2010
Ñîîáùåíèé: 25,918
Çàïèñåé â áëîãå: 17
07.10.2014, 15:35 4
Öèòàòà Ñîîáùåíèå îò ForEveR Ïîñìîòðåòü ñîîáùåíèå
+ âîçìîæíî ïðèäåòñÿ ïåðåîïðåäåëèòü íåêîòîðûå traits.
Íó ñî ñòðîêàìè ñëîæíåå ñèòóàöèÿ íåæåëè ñ êîìïëåñíûì òèïîì, traits â ÷åì, äëÿ ÷åãî?

Äîáàâëåíî ÷åðåç 7 ìèíóò
Ïîêà ÿ íàøåë ðåøåíèå ÷åðåç http://www.boost.org/doc/libs/1_56_0.../wrappers.html

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
 
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/binary_object.hpp>
 
BOOST_SERIALIZATION_SPLIT_FREE(UnicodeString)
BOOST_SERIALIZATION_SPLIT_FREE(AnsiString)
namespace boost {
    namespace serialization {
 
        template<class Archive>
        void save(Archive & ar, const UnicodeString& us, const unsigned int version)
        {
            const int size= us.Length()*sizeof(us[0]); // wchar_t
            ar & size;
            ar & boost::serialization::make_binary_object( const_cast<void*>(us.data()),
                                                                                                         size);
        }
 
        template<class Archive>
        void load(Archive & ar, UnicodeString& us, const unsigned int version)
        {
            int size;
            ar & size;
            us.SetLength(size/sizeof(us[0])); 
 
            ar & boost::serialization::make_binary_object( const_cast<void*>(us.data()),
                                                                                                         size);
        }
 
        template<class Archive>
        void save(Archive & ar, const AnsiString& as, const unsigned int version)
        {
            const int size= as.Length()*sizeof(as[0]); //  ñhar
            ar & size;
            ar & boost::serialization::make_binary_object( const_cast<void*>(as.data()),
                                                                                                         size);
        }
 
        template<class Archive>
        void load(Archive & ar, AnsiString& as, const unsigned int version)
        {
            int size;
            ar & size;
            as.SetLength(size/sizeof(as[0])); 
 
            ar & boost::serialization::make_binary_object( const_cast<void*>(as.data()),
                                                                                                         size);
        }
    }
}
Ðàáîòàåò, íî íå îñîáî íðàâèòñÿ, èáî åñëè îòêðûòü ôàéë âèäèì íàáîð ñèìâîëîâ, à íå ÷èòàáåëüíûé òåêñò êàê õîòåëîñü áû èáî âñå òàêè èñïîëüçóåòñÿ text_archive. Íî ñòîèò çàìåòèòü ÷òî std::wstring òî æå êàê-òî âûãëÿäèò íå êàê õîòåëîñü áû â îòëè÷èè îò std::string.
0
Dmitriy_M
1433 / 1313 / 131
Ðåãèñòðàöèÿ: 20.03.2009
Ñîîáùåíèé: 4,688
Çàïèñåé â áëîãå: 11
07.10.2014, 22:18 5
Ñ QString êîãäà òî äàâíî äåëàë Boost C++ - ñåðèàëèçàöèÿ boost, xml_woarchive, îøèáêà ëèíêîâàíèÿ
Íî â ïîñëåäíåì âàðèàíòå âðîäå áû ñòàë ïàêîâàòü â utf8 â std::string è ñåðèàëèçîâàòü std::string.

Äîáàâëåíî ÷åðåç 3 ÷àñà 28 ìèíóò
Âîò ïîñëåäíèé âàðèàíò ñ QString
Êëèêíèòå çäåñü äëÿ ïðîñìîòðà âñåãî òåêñòà

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <QtCore/QDebug>
#include <QtCore/QString>
 
#include <vector>
#include <boost/serialization/nvp.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/vector.hpp>
 
#include <fstream>
 
namespace boost
{
    namespace serialization
    {
 
        template<class Archive>
        inline void save(Archive& ar, const QString& s,
                const unsigned int /*version*/)
        {
            auto ba = s.toUtf8();
            std::string str(ba.data(), ba.size());
 
            ar << make_nvp("QString", str);
        }
 
        template<class Archive>
        inline void load(Archive& ar, QString& s,
                const unsigned int /*version*/)
        {
            std::string str;
            ar >> make_nvp("QString", str);
            QByteArray ba(&str[0], str.size());
            s.append(ba);
        }
 
        template<class Archive>
        inline void serialize(Archive& ar, QString& s,
                const unsigned int file_version)
        {
            boost::serialization::split_free(ar, s, file_version);
        }
 
    } // namespace serialization
} // namespace boost
 
int main(int argc, char** argv)
{
    {
        std::ofstream ofs("test.xml");
        boost::archive::xml_oarchive oa(ofs);
        std::vector<QString> s =
        { "Åõàë ãðåêà", "å¹´1月景æ˜*æ*¡" };
        oa << BOOST_SERIALIZATION_NVP(s);
        ofs.flush();
    }
 
    {
        std::ifstream ifs("test.xml");
        boost::archive::xml_iarchive ia(ifs);
        std::vector<QString> s;
        // restore the schedule from the archive
        ia >> BOOST_SERIALIZATION_NVP(s);
        for (auto str: s)
        {
            qDebug()<<str;
        }
    }
    return 0;
}
1
Avazart
Ýêñïåðò Ñ++
7791 / 5691 / 560
Ðåãèñòðàöèÿ: 10.12.2010
Ñîîáùåíèé: 25,918
Çàïèñåé â áëîãå: 17
08.10.2014, 18:35 6
Ñîáñòâåííî â Ñ++Buider ìîæíî èñïîëüçîâàòü UTF8String â äàííûõ (åñòü íåÿâíîå ïðåîáðàçîâàíèå â UnicodeString è AnsiString ïî ýòîìó íå ñîçäàåò íåóäîáñòâà)

Ñåðèàëèçàöèÿ UTF8String â XML, Ñ++Buider
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//---------------------------------------------------------------------------
#include <System.Classes.hpp> // UTF8String
#include <string>             // std::string
 
#include <boost/serialization/nvp.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
//---------------------------------------------------------------------------
namespace boost
{
        namespace serialization
        {
                template<class Archive>
                inline void save(Archive& ar, const UTF8String& s,
                                const unsigned int /*version*/)
                {
                    std::string str= s.c_str();
                    ar << make_nvp("UTF8String", str);
                }
 
                template<class Archive>
                inline void load(Archive& ar, UTF8String& s,
                                const unsigned int /*version*/)
                {
                    std::string str;
                    ar >> make_nvp("UTF8String", str);
                    s=  str.c_str();
                }
 
                template<class Archive>
                inline void serialize(Archive& ar, UTF8String& s,
                                const unsigned int file_version)
                {
                    boost::serialization::split_free(ar, s, file_version);
                }
 
        } // namespace serialization
} // namespace boost
//---------------------------------------------------------------------------
0
08.10.2014, 18:35
MoreAnswers
Ýêñïåðò
37091 / 29110 / 5898
Ðåãèñòðàöèÿ: 17.06.2006
Ñîîáùåíèé: 43,301
08.10.2014, 18:35

Ñåðèàëèçàöèÿ è îòïðàâêà ñåðèàëèçîâàííîãî îáüåêòà ïî ñåòè
Ñ ñåðèàëèçàöèåé âðîäå ðàçîáðàëñÿ, à âîò êàê ïîëó÷àòü ñåðèàëèçîâàííûé îáüåêò äëÿ îòïðàâêè ïî ñåòè íå...

Áóñò ñåðèàëèçàöèÿ. óêàçàòåëü íà àáñòðàêòíûé áàçîâûé êëàññ áåç êîíñòðóêòîðà ïî óìîë÷àíèþ
×èòàÿ äîêóìåíòàöèþ ïî ñåðèàëèçàöèè ñ ïîìîùüþ áóñòà çàïóòàëñÿ. Ñèòóàöèÿ ñëåäóþùàÿ. Èìååòñÿ...

CString::Format() è ïðåîáðàçîâàíèå double â CString
Âîò ôðàãìåíò ïðîãðàììû: void CMy6_1Dlg::OnRadio3() { CString s; int i=m_list1.GetCount();...


Èñêàòü åùå òåìû ñ îòâåòàìè

Èëè âîñïîëüçóéòåñü ïîèñêîì ïî ôîðóìó:
6
Îòâåò Ñîçäàòü òåìó
Îïöèè òåìû

ÊèáåðÔîðóì - ôîðóì ïðîãðàììèñòîâ, êîìïüþòåðíûé ôîðóì, ïðîãðàììèðîâàíèå
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Ðåéòèíã@Mail.ru