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

Zapisywanie obiektu do pliku - serializacja

Ostatnio zmodyfikowano 2014-10-27 22:32
Autor Wiadomość
Marox44
Temat założony przez niniejszego użytkownika
Zapisywanie obiektu do pliku - serializacja
» 2014-10-26 18:23:25
Witam,

Ostatnio zacząłem uczyc sie o zapisie danych do plikow binarnych. Potrzebuje zapisać właśnie w takim pliku obiekt danej klasy. Dowiedziałem się tylko, że trzeba napisać metody serializacji i deserializacjii i że aby to zrobić trzeba znać rozmiar tego co się chce zapisać.
Wszystko, co udało mi sie znaleść na ten temat to użycie czegoś o nazwie //boost//, przy czym potrzebuje stworzyć to możliwie 'ręcznie', bez użycia gotowych bibliotek.

Tak wygląda klasa:

C/C++
class MojeZadanie
{
public:
    MojeZadanie() { } //konstruktor domyślny
    ~MojeZadanie() { } //destruktor
    MojeZadanie( int numer, int data, string tresc, int datawykonania, int priorytet, int obrazek ); //konstruktor
   
    //pola
    int numer;
    int data;
    string tresc;
    int datawykonania;
    int priorytet;
    int obrazek;
   
    MojeZadanie * next; //wskaźnik na nastepny element
    MojeZadanie * prev; //wskaźnik na poprzedni element
   
};

Sprawdziłem sizeof tej klasy - 32 (z tym że wskaźniki wskazują na dwa takie same obiekty... czyli chyba jeszcze 2x24 ... :/ )
Co się jeszcze dowiedziałem, to to że (podobno) najlepiej jest użyć czegoś w rodziaju buforu w tablicy dynamicznej, a co do wskaźników to trzeba dołożyć do serializacji to, na co wskazują.

Prosiłbym o pomoc, chociaż jak się za to zabrać i ew. w miarę możliwości wyjaśnienie ogólnej zasady działania takiego mechanizmu :)
Pozdrawiam,
P-119466
pekfos
» 2014-10-26 20:33:21
Dopisz metodę, która do jakiegoś bufora (std::vector<char>?) będzie wstawiać swoje dane i drugą, do odczytywania. Implementacja zależy od potrzeb i konkretnej klasy. Przez sizeof i rzutowanie wskaźników nie da się tego serializować.
P-119485
Marox44
Temat założony przez niniejszego użytkownika
» 2014-10-27 22:32:53
Okej, dzięki za podpowiedź  Spróbowałem na razie z użyciem zwykłego strumienia i pętli while żeby po prostu zapisywał kolejne obiekty, na razie z jednym tylko polem i problem jest taki, że owszem, przy zapisie zapisuje po kolei wszystkie elementy, lecz przy wczytaniu wczytuje wszystkie na raz do jednego obietku :/ (np. jak na zapisie mam 5 elementów z wartościami kolejno 1 2 3 4 , to po wczytaniu tworzy jeden element z wartością 1234)
P-119553
« 1 »
  Strona 1 z 1