프로젝트의 두 가지 분기에서 나오는 일부 데이터를 직렬화합니다. 데이터는 boost::serialization
을 사용하여 텍스트 아카이브 형식으로 출력됩니다. diff가 두 개의 직렬화 된 파일간에 만들어지기 때문에 출력의 차이가 발생할 수있는 지점을보다 잘보기 위해 일부 직렬화 된 부분 사이에 직렬화 된 파일에 일부 디버그 메시지를 추가합니다. 여기 부스트 직렬화 - 문자열 길이 출력을 피 하시겠습니까?
std::ofstream ofs("./SomeFile.txt"); // for brevity's sake, no actual path used
{
boost::archive::text_oarchive oa(ofs);
std::string debug_str;
debug_str = "\n\nPart 1\n";
oa & debug_str;
// ... some other serialized parts ...
debug_str = "\n\nPart 145\n";
oa << debug_str;
}
당신은 내가 처음 사용 사업자 (<<
대 &
가) 출력의 차이를 한 것으로 생각 것을 알 수 있습니다, 아직 아무튼 't, 나는 다음과 같은 텍스트 파일을 얻을 :
22 serialization::archive 7 9 [CRLF]
[CRLF]
Part 1 [CRLF]
11 [CRLF]
[CRLF]
Part 145 [CRLF]
22 serialization::archive 7
부분은 내가 추측 아카이브의 유형을 식별, 표준 부스트 직렬화 헤더입니다. 이후에 내가 제거하고 싶은 부분, 즉 9
이 나온다. - 거위를 쫓고 난 후에 나는 9
이 "\n\nPart1\n"
문자열의 길이라는 것을 알아 냈다!
예상되는 동작입니까 아니면이 출력을 우회하는 방법이 있습니까? 다른 실제 기록의 경우 길이 등을 표시하는 다른 "제어 코드"를 명백히 사용하지 않습니다.
디버그 출력을 추가하는 것이 유용 할 수 있습니다. 그러나 디버그 문자열의 길이가 다를 수 있습니다 (분기 중 하나에서 심한 리팩토링이 발생하기 때문에 diff는 일부 오탐을 산출합니다).
의견을 보내 주셔서 감사합니다.
신속한 답장을 보내 주셔서 감사합니다. 시험해 보겠습니다. – Dr1Ku
XML 아카이브로 전환하는 것과 관련하여 너무 많은 오류가 발생하여 결국 문자열 길이로 살아야합니다. – Dr1Ku
char 문자를 char로 삽입하려고 시도 했습니까? 문자열은 문자열을 직렬화 해제 할 수 있도록 길이가 필요합니다. 즉 크기를 알아야합니다. 크기를 알고있는 경우 9자를 직렬화/비 직렬화 할 수 있습니다. 크기가 없어야합니다. –