возможно ли сериализовать любой класс STL, включая std :: string? У меня есть набор std :: строк, и я пытаюсь записать их в файл и загрузить их обратно в std :: set.Сериализация класса STL
ответ
Да, это возможно. Например, с boost.serialization.
Для СТЛ, прочитать corresponding tutorial section
Если вы просто хотите, чтобы написать std::set<std::string>
в файл и читать его обратно, и ваш проект уже не использовать Boost, вы можете попробовать что-то простое:
ofstream file("file.txt");
copy(theSet.begin, theSet.end(), ostream_iterator<string>(file, "\n"));
Это просто напишет строки, по одному в каждой строке, в текстовый файл. Тогда читать их:
ifstream file("file.txt");
string line;
while(getline(file, line))
theSet.insert(line);
Что делать, если эти строки содержат новую строку? Это очень плохая идея ... –
Конечно, если строки содержат символы новой строки, это не сработает. Я бы согласился поспорить, что OP этого не делают. –
Почему вы не разделите их с нулевым символом? Строки C обычно не содержат этих строк. –
приведен пример использования подталкивание :: сериализации сериализовать типа 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;
}
Compile с
g++ -lboost_serialization myfile.cc
Обратите внимание, что
#include <boost/archive/text_iarchive.hpp>
должен быть до любого другогоboost
Сериализация включает.- Вам необходимо включить заголовок для STL-типа, который вы хотите архивировать.
проверьте это. Облегченный достаточно
ТОЛЬКО ОДИН CPP Файла
облегченных сериализации решение
есть несколько импровизировать из там сериализации поддержки, как protobuffer, подталкивания: сериализации, слишком тяжелы для меня. поэтому я написал эту облегченную версию.
поддержка- вектор
- карта
- набор
- строка
- примитивы (целое, двойной, длинный, ...)
- обратный порядок байт поддержки
- вложенности поддержка контейнера
использовать символ вместо BOOL в STL why
сборки
вы можете создать этот проект CMake. или просто импортируйте serialization.h в свой проект.
определить CHECK_ENDIAN = 1, если вы хотите проверить обратный порядок байт
демо
проверка testSerialization.cpp
пришедшего Soom
обратный порядок байт преобразования.
- 1. Сериализация STL-карты структур
- 2. Сериализация класса внутри класса
- 3. Сериализация класса C++
- 4. Настройка класса итератора STL
- 5. Скрытые контейнеры класса STL?
- 6. XML Сериализация анонимного класса
- 7. Сериализация ссылочного класса Объект
- 8. Сериализация класса вызывает ошибку
- 9. Сериализация/десериализация производного класса
- 10. Сериализация абстрактного класса
- 11. Сериализация класса событий
- 12. Сериализация атрибутов класса?
- 13. Сериализация частичного класса
- 14. C#: Сериализация простого класса
- 15. Сериализация пользовательского класса XML
- 16. Сериализация - загрузка класса
- 17. Сериализация зашифрованных свойств класса
- 18. xml сериализация родового класса
- 19. Сериализация статического внутреннего класса
- 20. STL priority_queue копии компаратор класса
- 21. Сериализация дозвукового класса для JSON
- 22. Java-сериализация для расширенного класса
- 23. Правильно Сериализация класса в C#
- 24. Сериализация анонимного класса в Java
- 25. Сериализация класса, содержащего несериализуемый класс
- 26. Сериализация класса прокси в файл
- 27. . Сериализация класса .net с backgroundworker
- 28. Сериализация и восстановление неизвестного класса
- 29. Сериализация POCO Исключая членов класса
- 30. Сериализация класса, содержащего Словарь Dictionay
Я мог делать со строками, можно ли это сделать непосредственно с помощью набора, например? – user963241
@cpx: '#include' –
Abyx
Он не хочет иметь пример, который создает класс с контейнером STL, он хочет пример функции, которая получает контейнер STL и замаскивает его файл. –