使用Thrift在c ++中设置联合

时间:2012-10-29 11:12:22

标签: c++ thrift

我的Thrift架构中有这样的东西:

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

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

struct TestResult {
  1: required TestStatus status
}

我可以使用Java,Perl和Python库来定义这个,但是 使用C ++库时遇到问题。这是一个例子 爪哇:

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

我最接近在C ++中定义的是:

TestResult testResult;
testResult.status.ONE = testStatus;

但是当我尝试发送到服务器时,我收到一个错误告诉我 状态字段不存在,结构的转储显示为 空。

如何设置测试状态?

使用Thrift 0.6.1。

1 个答案:

答案 0 :(得分:0)

这可能是缺少赋值运算符的问题吗?根据结构TestStatusOne和TestStatusTwo的定义,您可能需要创建赋值运算符(operator =())。

您是否尝试在Thrift客户端上执行GDB并在将其发送到服务器之前查看testResult的内容?检查其内容是否有意义。