배열을 가지고 std::vector<BaseClass*>
Google의 프로토콜 버퍼 라이브러리를 사용하여이 배열을 파일에 저장하는 올바른 방법은 무엇입니까?프로토콜 버퍼를 사용하여 다형 객체 배열에 파일을 직렬화하는 방법은 무엇입니까?
BaseClass
은 클래스의 기본 계층이며 여러 하위 클래스가 있습니다. Google의 프로토콜 버퍼가 이러한 용도로 적합합니까 아니면 다른 라이브러리가 선호 될 수 있습니까?
배열을 가지고 std::vector<BaseClass*>
Google의 프로토콜 버퍼 라이브러리를 사용하여이 배열을 파일에 저장하는 올바른 방법은 무엇입니까?프로토콜 버퍼를 사용하여 다형 객체 배열에 파일을 직렬화하는 방법은 무엇입니까?
BaseClass
은 클래스의 기본 계층이며 여러 하위 클래스가 있습니다. Google의 프로토콜 버퍼가 이러한 용도로 적합합니까 아니면 다른 라이브러리가 선호 될 수 있습니까?
위에서 말했듯이 확장 메커니즘을 사용하여 다형성을 구현해야합니다. 유용한이 링크를 찾을 수 있습니다 http://www.indelible.org/ink/protobuf-polymorphism/
프로토콜 버퍼는 반복되는 필드를 허용하며 코드에서 std::vector
과 같은 역할을합니다. 다형성 객체의 경우 확장 프레임 워크를 사용할 수 있습니다. 확장 헤더 아래의 here을 참조하십시오.
Class
요소를 포함하는 목록 메시지 MyList
을 만들 수 있습니다. 그리고이 각 서브 클래스에 대한 특정 메시지가 필요합니다
message MyList{
repeated Class entry = 1;
}
message Class{
required BaseProperties baseProperties = 1;
oneof{
SubClassOne sub_one_properties = 2;
SubClassTwo sub_two_properties = 3;
...
}
}
message BaseProperties{
//contains common properties of BaseClass
}
message SubClassOne{
//contains specific properties of one this SubClass
}
message SubClassTwo{
//contains specific properties of one this SubClass
}
당신이 oneof
키워드를 좋아하지 않는 경우에, 또는 이전 libprotobuf를 사용하고, 당신은 또한 typeinformations에 열거를 삽입 및 옵션 messagefields 해당 추가 할 수 있습니다
message Class{
enum ClassType{
SUB_CLASS_ONE = 1;
SUB_CLASS_TWO = 2;
}
required ClassType type = 1;
required BaseProperties baseProperties = 2;
optional SubClassOne sub_one_properties = 3;
optional SubClassTwo sub_two_properties = 4;
...
}