2017-01-30 3 views
1

동안 필드 및 클래스 이름을 변경하는 방법이 같은 구조체와 결합 파일이 있습니다. 그러나 C# 코드에서는 필드 이름을 대문자로 표기합니다 : MyField1, MyField2.본드 : 나는 C에 대한 ++ 또한 C#을위한 코드를 생성하기 위해이 파일을 사용하고</p> <pre><code>struct Foo { 0: float myField1; 1: float myField2; } </code></pre> <p>: 코드 생성

이렇게 할 방법이 있습니까?

마찬가지로 Foo를 내 C# 코드에서 Bar라는 이름으로 지정하여 (본드 클라이언트와 역 호환되기 위해) 필요할 수 있습니다. 그러나 이것이 어떻게 행해질 수 있는지에 대한 어떠한 문서도 보이지 않습니다.

답변

0

본드 코드 생성기 인 gbc를 사용할 때 유형/필드의 이름을 바꿀 방법이 없습니다. 기능은 단순히 존재하지 않습니다.

원한다면 C# 클래스를 손으로 작성하고 Bond의 attributes으로 주석을 달 수 있습니다. 이것은 고도의 호환 구조체를 얻을 것이다. 이 방법을 사용하면 .bond 파일의 구조체를 설명 할 수있는 중앙 위치를 갖는 이점을 많이 잃게됩니다. 이는 기존 클래스에 주석을 달아 사전 본드 클라이언트와의 인터페이스가 적절하게 이루어질 수 있습니다.

당신이 문제의 구조체에 따라이 할 거라고하는 방법의 예 :

[Bond.Schema] 
class Bar 
{ 
    [Bond.Id(0)] 
    public float MyField1; 

    [Bond.Id(1)] 
    public float MyField2; 
} 

이 몇 가지주의 사항이 있습니다

    수동으로 동기화를 유지해야합니다
  • .bond 파일을 변경하면됩니다.
  • 이러한 Foo 및 Bar 구조체의 전체 스키마는 약간 다릅니다. 필드는 다른 이름 ("myField1"대 "MyField2")을 가지며, 각 구조체의 SchemaDef를 살펴보면이 필드를 감지 할 수 있습니다. binary protocols을 사용할 때 필드 이름은 중요하지 않습니다. ID 만 있습니다. 텍스트 기반 프로토콜을 사용하는 경우 the names do matter.
+0

감사합니다. 이 문제를 점검하고 비슷한 해결책이있는 내 솔루션과 비교해 보겠습니다 : 나는 2 개의 .bond 파일을 만들었고, 하나는 C++ 용이고 다른 하나는 C# 용으로 만들었습니다. 대문자 및 전환이 필요한 특정 분야 (예 : TimeSpan)를 제외하고는 거의 동일합니다. 이 솔루션은 또한 파일을 동기화 상태로 유지하는 문제가 있습니다. (바이너리 직렬화를 사용하고 있기 때문에 이름의 차이점이 나를 괴롭히지 않는다.) – Eli

+0

C++과 C#에서 같은 대문자를 사용하고 싶다면 하나의 .bond 파일로 이동할 수있다. 시간 범위의 경우 'using TimeSpan = uint64'와 같은 별칭은 [C#] (https://github.com/Microsoft/bond/tree/master/examples/cs/core/date_time)과 [C++] (https://github.com/Microsoft/bond/tree/master/examples/cpp/core/time_alias); 코드 생성시 gbc에 다른 옵션을 제공하면됩니다. – chwarr