C++ 객체 직렬화 라이브러리를 만들고 있습니다. 이것은 자기 학습과 향상에 대한 것입니다. & 나는 boost 또는 google protocol buf와 같은 off-the-shelf 라이브러리를 사용하고 싶지 않습니다. 태그 값 등으로 인코딩하는 것과 같은 좋은 방법에 대해 경험이나 의견을 공유하십시오. POD를 지원하고 비선형 DS를 지원하는 것으로 시작하고 싶습니다.C++ 객체 직렬화 기법에 대한 제안
감사 추신 : HNY2012
C++ 객체 직렬화 라이브러리를 만들고 있습니다. 이것은 자기 학습과 향상에 대한 것입니다. & 나는 boost 또는 google protocol buf와 같은 off-the-shelf 라이브러리를 사용하고 싶지 않습니다. 태그 값 등으로 인코딩하는 것과 같은 좋은 방법에 대해 경험이나 의견을 공유하십시오. POD를 지원하고 비선형 DS를 지원하는 것으로 시작하고 싶습니다.C++ 객체 직렬화 기법에 대한 제안
감사 추신 : HNY2012
나는 몇 년 전에 기사를 썼다. 코드와 도구는 쓸모 없지만 개념은 동일하게 유지 될 수 있습니다.
this이 도움이 될 수 있습니다.
프로세스 간 통신을 위해 직렬화가 필요한 경우 인터페이스 정의에 몇 가지 인터페이스 언어 (IDL 또는 ASN.1)를 사용하는 것이 좋습니다.
그래서 (C++이 아닌) 다른 언어도 쉽게 지원할 수 있습니다. 또한 코드/스텁 생성기를 쉽게 구현할 수 있습니다.
예, 내 의도는 전선에 물건을 보내는 것입니다. IDL/ASN을 사용하는 경우.1 그러면 필자는 본질적으로 (BER/PER) 등을 사용할 데이터 유형을 인코딩하기 위해 해당 컴파일러 (idl 컴파일러)를 사용해야 할 것입니다. 데이터를 포장하고 전송하기 위해 자체 인코딩을 정의하려고했습니다. – sanjayk79
저는 지난 몇 달 동안 비슷한 작업을 해왔습니다. 기존의 클래스 (거대한 기존 코드베이스)를 일련 번호로 직렬화하는 작업 이었기 때문에 부스트를 사용할 수 없었고 클래스가 serialize() 가상 함수 (다중 상속을 원하지 않음)가있는 인터페이스를 상속하는 것은 부적절했습니다. .
취한 접근 방식은 다음과 같은 두드러진 특징이 있었다 :
std::fstream
에서 파생 됨). 스트림 객체는 읽기 전용 또는 쓰기 전용 모드로만 열 수 있으므로 (코드에 따라) 동일한 serialize() 함수를 사용하여 파일에서 읽거나 파일에 쓸 수 있습니다. 개울이 열렸다. 따라서 반원들의 읽기와 쓰기의 순서가 불일치 할 가능성은 없습니다.위의 공유 아이디어 중 일부는 http://www.cs.sjsu.edu/~pearce/modules/lectures/cpp/Serialization.htm입니다. 희망이 도움이됩니다.
[Boost로 클래스를 직렬화 할 수 있도록하기 위해 어떤 것도 상속하지 않아도됩니다.] (http://www.boost.org/doc/libs/1_48_0/libs/serialization/doc/tutorial.html#nonintrusiveversion). public 인터페이스가 클래스를 직렬화하기에 충분하지 않지만 어떤 것도 상속 할 필요가 없다면 private 변수가'serialize()'함수에서 볼 수 있도록 클래스를 수정해야 할 수도 있습니다. –
동의. 그러나 Boost는 우리가 이미 가지고 있던 복잡한 계층을 감안할 때 너무 복잡해졌습니다. 손으로 한 것은 장기적으로 더 적절하고 유지 보수가 가능한 것처럼 보였습니다. – Somesh
감사합니다. 귀하의 의견은 정말 도움이됩니다. 나는 당신이 제공 한 링크를 통해 갈 것입니다. 나는 네트워크를 통해 통신하기 위해 직렬화 된 객체를 사용할 것이다. 또한이 기사에서는 비선형 DS (good thats)에 대한 지원에 대해서도 설명합니다. 내가 첫 번째 프로토 타입을 가지고 나면 더 많은 논의를 해보겠습니다 :) – sanjayk79
감사합니다. @Emilio Garavaglia. 내가 당신의 통찰력에 대한 기사를 살펴 보겠습니다 – sanjayk79