2013-01-06 2 views
2

기존의 .proto 파일을 사용하지 않고 메시지를 작성하고 cpp/cxx/h 파일에서 컴파일한다고 가정 해보십시오. 우리는 protobuf를 엄격하게 라이브러리로 사용하고자합니다. 예를 들어 우리는 메시지 형식 설명을 알고 있습니다. MyMessage이라는 메시지는 MyIntFiels이고 선택 사항은 MyStringFiels이어야합니다. 그런 메시지를 만드는 방법? 예를 들어 간단한 데이터로 채우면 .bin에 저장하고 바이너리 내용을 다시 읽습니다.프로토콜 버퍼를 사용하여 동적 메시지를 만드는 방법은 무엇입니까?

나는 dynamic_message.h help description 및 DescriptorPool 등을 모두 보았지만 메시지에 필드를 추가/제거하는 방법은 물론 DescriptorPool에 비행 메시지를 설명하는 메시지를 추가 할 방법이 없습니다.

아무 설명해 주시겠습니까?

답변

2

짧은 대답 : 그런 식으로 사용할 수 없습니다.

Protobuf의 overview page는 말한다 :

XML은 또한 - 자체 설명 - 어느 정도. 프로토콜 버퍼는 메시지 정의 (.proto 파일)가있는 경우에만 의미가 있습니다.

의미 Protobuf의 전체적인 의미는 자기 자신을 설명하는 능력을 파싱 속도에 맞추어 버리는 것을 의미합니다. ==> 자기 설명 메시지를 만드는 것이 목적이 아닙니다.

XML 또는 JSON 또는 다른 직렬화 형식을 사용해보십시오. 보호가 필요한 경우 대칭 암호화 및/또는 압축 압축을 사용할 수 있습니다.

+1

사실이 아닙니다. [dynamic_message.h] (https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.dynamic_message)'컴파일시 알 수없는 유형을 모방 할 수있는 Message 구현을 정의합니다 . – myWallJSON

+2

문제는 문서를 올바르게 이해하면 동적 메시지 생성이 아닌 동적 파싱에 사용된다는 것입니다. DynamicMessage (C++ 및 Java에서 사용 가능)와 같은 클래스를 사용하여 다음과 같이 조작 할 수있는 도구를 작성할 수 있습니다. [https://developers.google.com/protocol-buffers/docs/techniques#self-description] SelfDescribeingMessage "를 참조하십시오. 나는 자기 묘사 가능성에 대해 완전히 바른 것은 아니지만, 조언은 성립한다. – DarkWanderer

+0

우리는'message MyMessage {int32 MyIntFiels = 1; string MyStringFiels = 2;}'어떻게 그러한 문자열을 입력합니까? – myWallJSON

관련 문제