1

Thrift スキーマには次のようなものがあります。

struct TestStatusOne { .... }
struct TestStatusTwo { .... }

union TestStatus {
  1: TestStatusOne  ONE
  2: TestStatusTwo  TWO
}

struct TestResult {
  1: required TestStatus status
}

Java、Perl、および Python ライブラリを使用してこの問題を定義できますが、C++ ライブラリでそれを行うのに問題があります。Java での例を次に示します。

TestResult testResult = new TestResult(
  new TestStatus(TestStatus._Fields.findByName("ONE"), testStatus)
);

C ++で定義するのに最も近いのは次のとおりです。

TestResult testResult;
testResult.status.ONE = testStatus;

しかし、サーバーに送信しようとすると、ステータス フィールドが存在しないというエラーが表示され、構造体のダンプにはそれが null として表示されます。

テストステータスを設定するにはどうすればよいですか?

Thrift 0.6.1 を使用しています。

4

1 に答える 1

0

これは代入演算子の欠落の問題でしょうか? 構造体 TestStatusOne および TestStatusTwo の定義によっては、代入演算子 ( operator=() ) を作成する必要がある場合があります。

Thrift クライアントで GDB を実行してみて、サーバーに送信する前に testResult の内容を確認しましたか? その内容が理にかなっていることを確認してください。

于 2012-10-29T11:32:30.050 に答える