2014-11-05 2 views
1

배열을 가지고 std::vector<BaseClass*> Google의 프로토콜 버퍼 라이브러리를 사용하여이 배열을 파일에 저장하는 올바른 방법은 무엇입니까?프로토콜 버퍼를 사용하여 다형 객체 배열에 파일을 직렬화하는 방법은 무엇입니까?

BaseClass은 클래스의 기본 계층이며 여러 하위 클래스가 있습니다. Google의 프로토콜 버퍼가 이러한 용도로 적합합니까 아니면 다른 라이브러리가 선호 될 수 있습니까?

답변

1

프로토콜 버퍼는 반복되는 필드를 허용하며 코드에서 std::vector과 같은 역할을합니다. 다형성 객체의 경우 확장 프레임 워크를 사용할 수 있습니다. 확장 헤더 아래의 here을 참조하십시오.

1

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; 
    ... 
} 
관련 문제