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
Tak, jest to możliwe. Na przykład z boost.serialization.
Dla STL, przeczytaj corresponding tutorial section
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);
Co jeśli te ciągi zawierają nową linię? To bardzo zły pomysł ... –
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. –
Dlaczego nie rozdzielisz ich na pusty znak? Struny C zwykle ich nie zawierają. –
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
#include <boost/archive/text_iarchive.hpp>
musi znajdować się przed jakimkolwiek innymboost
serializacja obejmuje.- Musisz dołączyć nagłówek dla typu STL, który chcesz zarchiwizować.
sprawdź to. lite wystarczająco
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.
- 1. Serializacja statycznej klasy wewnętrznej
- 2. Serializacja Java dla rozszerzonej klasy
- 3. Serializacja zmiennej klasy, która nie implementuje serializacji
- 4. Serializacja Easy Scala?
- 5. SQLite lub Serializacja
- 6. Serializacja interfejsy
- 7. serializacja list w katalogach
- 8. kompilacja klasy C++ w Xcode: błąd podczas kompilacji: wektor stl
- 9. Statyczne elementy i serializacja wzmocnienia
- 10. Serializacja w Scala/Akka
- 11. Serializacja QGraphicsScene zawartość
- 12. Szukasz wektora C++ STL wewnątrz wektora STL
- 13. Cechy i serializacja/deserializacja
- 14. Serializacja/Deserialization & Proguard
- 15. Uzasadnienie projektu za STL
- 16. Serializacja Java z inicjalizacją statyczną
- 17. Serializacja JSON - usuwanie pustych klawiszy
- 18. Serializacja klas XStream i Object
- 19. Dlaczego serializacja binarna jest szybsza niż serializacja xml?
- 20. Serializacja funkcji w Haskell
- 21. Serializacja XML Dynamic Ignore
- 22. Serializacja obiektu do JSON
- 23. Serializacja Xml ReadOnlyCollections
- 24. JSON na Androida - serializacja
- 25. Szybka prosta serializacja obiektów
- 26. Serializacja przedmiotów maszynopisów?
- 27. Serializacja struktury danych Clojure
- 28. Asynchroniczna serializacja protobuf
- 29. Kafka Serializacja obiektu
- 30. Serializacja XML wyliczeń
Byłem w stanie zrobić ze stringami, czy można to zrobić bezpośrednio z zestawem np.? – user963241
@ cpx: '#include' –
Abyx
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. –