2017-11-29 40 views
0

평면 버퍼 스키마에서 테이블을 전달하는 방법을 이해하지 못합니다. c1.fbsflatbuffer 스키마의 순환 종속성을 제거하기 위해 선언 테이블을 전달하는 방법이 있습니까?

c2.fbs

include "c1.fbs" 
table C2 
{ 
    c1: C1; 
} 

문제에

include "c2.fbs" 
table C1 
{ 
    c2 : C2; 
} 

//에서

// : 스키마 위

  1. 이 flatc 괜찮 컴파일 (1.8.0) 하지만 생성 된 cpp 헤더에 순환 종속성이 발생합니다! flatc도 불평해서는 안됩니까?
  2. 어떻게 c1.fbs에 C2를 선언 전달하고, 호출을 제거합니다 : 이보다 구체적으로는, 내가 FBS 스키마에서 다음 클래스 구조를 모방하려고이 문제를 발견 :

는 PS "c2.fbs"을 포함한다.

union Cs {C2, C3}; 
class C1 
{ 
    Cs x; 
} 

class C2 : public C1 
{ 
    List <C1> y; 
} 

class C3 : public C1 
{ 
} 

도와주세요.

+0

'C2','C3'은 모두 enum 값과 클래스 이름입니까? – Jarod42

+0

나는 C2와 C3 클래스가 선언 된 노조 Cs를 만들고 싶었다. 질문에서 cpp 태그를 제거하겠습니다. 내 의심의 여지가 flatbuffer 주위에 동그라미가 있습니다. –

답변

0

FlatBuffers 스키마 언어에 전달 선언문이 없으며 FlatBuffers는 자동으로 사이클을 지원합니다. 당신이보고있는 것은 C++ 생성기의 버그 일 것입니다 (모든 것을 미리 선언하는 이유는 확실하지 않습니다). 그래서 FlatBuffers github 사이트에서 문제를 제출하십시오.

해결 방법은 지금은 하나의 파일에 붙여 놓는 것일 수 있습니다.

+0

문제는 github에서 추적합니다 : https://github.com/google/flatbuffers/issues/4408 –

+0

예 .. 언급 된 해결 방법은 생성 된 헤더에 포함되지 않으며 모든 클래스가 전달되므로 그 안에. –

+0

우리는 지금 이것을위한 진정한 해결책을 가지고 있습니까? 단일 스키마 작성의 해결 방법은 스키마를 거대하고 유지하기 어렵게 만드는 것입니다. forward에 관한 모든 것을 선언하는 것과 관련해서는 현재 작동하지 않는 것처럼 보입니다. 파일에서 구조체가 선언되어 있고 다른 포함 된 파일의 구조체가 선언되지 않습니다! 내가 임시 직원으로 제안하는 것. 솔루션은 헤더 가져 오기 제한 이전에 전달 선언을 갖는 것이므로 사이클의 경우에도 모든 전달 선언이 파일에 있습니다. –