如何在 C++ 源代码中正确设置 Thrift 结构中的字段?

How do I set fields in Thrift struct properly in C++ sources?

我注意到在我的 thrift 结构 MyThriftStruct 的生成的 C++ class MyThriftStruct 中有一个名为 __set_FIELD 的方法。调用此方法会将属性 MyThriftStruct.__is_set.FIELD 设置为 true,告诉结构体此字段已设置。

我还注意到,在 official tutorial 中,他们通过直接复制值来设置 thrift 结构的字段:

MyThriftStruct.FIELD = val;

第一种方法看起来很难看,但后一种方法没有改变 __isset 标志。那么在C++中设置thrift struct的字段应该用哪一个呢?

这取决于:对于 required 字段或 default(既不是必需的也不是可选的)字段 MyThriftStruct.FIELD = val; 就足够了。

set_FIELD 仅对可选字段是必需的(或需要手动修改 __isset 结构字段以确保可选字段序列化)