【发布时间】:2016-05-31 00:39:01
【问题描述】:
我做了三个字段的简单联合
union example{
1:string STRING,
2:i64 INT64,
3:double DOUBLE
}
我将客户端中的示例联合实例化为:
example ex;
ex.__set_STRING("Example");
ex.__isset.STRING = true;
并通过接受示例作为参数的方法发送示例
在服务器中,被调用的方法是这样完成的:
void get(const example &ex)
{
cout << ex.__isset.STRING << ' ' << ex.__isset.INT64 << ' ' <<
ex.__isset.DOUBLE << endl;
cout << ex << endl;
}
奇怪的是这样一个小程序的输出是:
1 1 1
example(STRING="Example", INT64=0, DOUBLE=0)
我不知道这是否是设置联合类型的正确方法,但我尝试了几种组合,但似乎都没有。
sn-p 的来源可以在这里找到:https://github.com/enriquefynn/union_thrift
【问题讨论】:
-
在
example ex;之后尝试memset(&ex, 0, sizeof(ex)); -
或者手动设置
__isset.INT64 = __isset.DOUBLE = false; -
已经试过了,不行:/
-
请发布 thrift 为客户端和服务器端序列化生成的代码。
-
我只是将此代码附加到教程 cpp 代码中。这个问题很容易重现。