2010-12-12 17 views
5

czy możliwe jest serializowanie dowolnej klasy STL, w tym std :: string? Mam zestawy std :: string i próbuję zapisać je w pliku i wczytać z powrotem do std :: set.Serializacja klasy STL

Odpowiedz

10

Tak, jest to możliwe. Na przykład z boost.serialization.

Dla STL, przeczytaj corresponding tutorial section

+0

Byłem w stanie zrobić ze stringami, czy można to zrobić bezpośrednio z zestawem np.? – user963241

+2

@ cpx: '#include ' – Abyx

+0

Nie chce przykładu, który tworzy klasę z kontenerem STL, chce przykładu funkcji, która pobiera kontener STL i wkłada go do plik. –

4

Jeśli chcesz po prostu napisać std::set<std::string> do pliku i odczytać go z powrotem na zewnątrz, a projekt nie korzysta już Boost można spróbować coś prostego:

ofstream file("file.txt"); 
copy(theSet.begin, theSet.end(), ostream_iterator<string>(file, "\n")); 

Po prostu zapisze łańcuchy, po jednym w wierszu, w pliku tekstowym. Potem je czytać:

ifstream file("file.txt"); 
string line; 
while(getline(file, line)) 
    theSet.insert(line); 
+2

Co jeśli te ciągi zawierają nową linię? To bardzo zły pomysł ... –

+1

Oczywiście, jeśli ciągi zawierają znaki nowej linii, to nie będzie działać. Byłbym skłonny założyć się, że OP nie. –

+0

Dlaczego nie rozdzielisz ich na pusty znak? Struny C zwykle ich nie zawierają. –

4

przykład użycia boost :: serializacji do serializacji typu STL

#include <map> 
#include <fstream> 
#include <boost/archive/text_iarchive.hpp> 
#include <boost/archive/text_oarchive.hpp> 

#include <boost/serialization/map.hpp> 

int main(int argc,char** argv) { 
    std::ofstream s("tmp.oarchive"); 
    boost::archive::text_oarchive oa(s); 
    std::map<int,int> m; 
    m[1] = 100; 
    m[2] = 200; 
    oa << m; 
} 

skompilować z

g++ -lboost_serialization myfile.cc 

Zauważ, że

  1. #include <boost/archive/text_iarchive.hpp> musi znajdować się przed jakimkolwiek innym boost serializacja obejmuje.
  2. Musisz dołączyć nagłówek dla typu STL, który chcesz zarchiwizować.
1

sprawdź to. lite wystarczająco

STL serialization

TYLKO JEDEN CPP plik potrzebny

Lite rozwiązanie serializacji

istnieje kilka lib tam wsparcia serializacji, jak protobuffer, doładowania: serializacji, zbyt ciężki dla mnie. więc napisałem tę wersję Lite.

wsparcie

  • wektor
  • mapa
  • ustawić
  • ciąg
  • prymitywów (int, double, długi, ...)
  • endian support
  • gniazdowania wsparcia kontenera

wykorzystanie char zamiast bool w STL why

build

można zbudować ten projekt przez CMake. lub po prostu zaimportuj serialization.h do swojego projektu.

określić CHECK_ENDIAN = 1 jeśli chcesz sprawdzić endian

demo

check testSerialization.cpp

comming Soom

endian konwersji.