Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zapis klasy z polami alokowanymi dynamicznie do pliku binarnego

Ostatnio zmodyfikowano 2012-04-06 15:35
Autor Wiadomość
akwes
Temat założony przez niniejszego użytkownika
Zapis klasy z polami alokowanymi dynamicznie do pliku binarnego
» 2012-04-06 13:51:32
Witam. Zastanawiam się czy jest jakiś myk aby dla klasy

C/C++
class CKlasa
{
public:
    int var1;
    char * Data;
    // oczywiście destruktor zwalniający zasoby
};

przeszło to:

C/C++
CKlasa tmp;
tmp.Data = new char[ 256 ];
// ...
file.write(( char * ) & tmp, sizeof( tmp ) );

Na razie problem rozwiązuje przez zapisywanie klasy składnik po składniku, ale to tak brzydko wygląda :)

P-53958
DejaVu
» 2012-04-06 14:37:56
Siłą rzeczy musisz serializować każdą zmienną ręcznie - zapisanie bowiem wskaźnika do pliku nic Ci nie da poza tym, że aplikacja się wywali przy wczytaniu takiego wskaźnika. Poza tym co to za problem napisać poniższą metodę:
C/C++
void CObiekt::serializuj( CSerializer & output ) const
{
    output.zapisz( m_liczbaInt );
    output.zapisz( m_tekst );
    output.zapisz( m_liczbaDouble );
}

/edit:
Oraz metodę:
C/C++
void CObiekt::deserializuj( CSerializer & input )
{
    input.wczytaj( m_liczbaInt );
    input.wczytaj( m_tekst );
    input.wczytaj( m_liczbaDouble );
}
P-53961
akwes
Temat założony przez niniejszego użytkownika
» 2012-04-06 14:45:27
Tego się spodziewałem, liczyłem, że może coś mi umyka i da się ładniej zapisać.

Ale poznałem dzięki temu nowe słówko. Fajnie zrobić coś, a potem się dowiedzieć, że to ma swoją nazwę :)

//edit, no tak mi to aktualnie działa :) Ale pokusa zapisania tego w jednej linijce była duża :)
P-53963
DejaVu
» 2012-04-06 14:51:42
W bibliotece boost znajduje się klasa/szablon do serializacji obiektów - z doświadczenia jednak nie polecam jego używać :P
P-53965
akwes
Temat założony przez niniejszego użytkownika
» 2012-04-06 15:03:16
Z boostem nie będę kombinował, bo nie sądzę żeby to wiele dało, zwłaszcza skoro nie polecasz :D

Ok, dzięki za pomoc ;D
P-53966
DejaVu
» 2012-04-06 15:35:46
Otworzyłem jeszcze żeby dodać linka do tego o czym mówiłem: Jak korzystać z boost::archive::binary_oarchive.
P-53968
« 1 »
  Strona 1 z 1