2010-12-12 3 views
5

std :: string을 포함한 모든 STL 클래스를 직렬화 할 수 있습니까? 나는 std :: strings 집합을 가지고 있으며 파일에 쓰고 std :: set에 다시로드하려고합니다.STL 클래스의 직렬화

답변

10

예, 가능합니다. 예를 들어, boost.serialization. STL에 대한

+0

문자열로 할 수 있었는지, 예를 들어 세트로 직접 할 수 있습니까? – user963241

+2

@cpx :'#include ' – Abyx

+0

그는 STL 컨테이너를 가진 클래스를 만드는 예제를 원하지 않는다. 그는 STL 컨테이너를 가져 와서 그것을 집어 넣는 함수의 예제를 원한다. 파일. –

4

그냥, 파일에 대한 std::set<std::string>를 작성하고 다시 그것을 밖으로 읽으려면 corresponding tutorial section를 읽고 프로젝트는 이미 부스트를 사용하지 않습니다, 당신은 간단한 것을 시도 할 수 있습니다 :

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); 
+2

문자열에 새 행이 있으면 어떻게됩니까? 그것은 아주 나쁜 생각입니다 ... –

+1

물론 문자열에 개행 문자가 들어 있으면이 코드는 작동하지 않습니다. 나는 OP의 내기를 기꺼이 하겠지만. –

+0

왜 대신 null 문자로 구분하지 않습니까? C 문자열에는 일반적으로 포함되지 않습니다. –

4

직렬화 :: 부스트를 사용하는 예를 가진 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; 
} 

컴파일을 직렬화

g++ -lboost_serialization myfile.cc 

참고

  1. #include <boost/archive/text_iarchive.hpp>은 다른보다 앞에 나와야합니다.직렬화에 포함됩니다.
  2. 보관할 STL 유형의 머리글을 포함해야합니다.
1

이 내용을 확인하십시오. 라이트 충분히

STL serialization

ONLY ONE CPP 파일 NEEDED

가 존재 지원 직렬화을에서는 lib 몇 가지 프로토 버퍼처럼, 부스트가

라이트 직렬화 솔루션 : 직렬화, 나를 위해 너무 무거운. 그래서 나는이 라이트 버전을 썼다.

지원

  • 벡터
  • 지도
  • 문자열
  • 프리미티브 (INT, 더블, 긴, ...)
  • 엔디안 지원
  • 중첩 컨테이너 세트 지원
01 23,516,

사용 문자 대신 당신이 CMake하여이 프로젝트를 빌드 할 수 있습니다 STL why

빌드

에 bool에. 또는 serialization.h을 프로젝트로 가져 오면됩니다.

는 CHECK_ENDIAN = 1 만약 당신이 싶어 체크 엔디안

데모

체크 testSerialization.cpp

오고의 숨에

엔디안 변환을 정의합니다.

관련 문제