quicktype这个根据json自动生成处理代码的网站应该绝对没想到有人会这么用它提供的功能:
把通信双方(一方是C#,一方是C++)用到的所有类型的消息放在一个巨大的结构中,每次通信传递这个巨大的完整结构。
然后,
这个网站生成的C++的大结构中,每个字段类型可以设置为全都是boost::optional<>(要打勾那个全部搞成optional的生成选项才会),
小结构全部是class而不是struct,每个字段全都要通过set_xxx(),get_xxx()来操作。
好在是本地RPC,就算是几百个字段,速度也不慢。
原因在于,全部消息类型的json例子都放在同一个json文件中,每次从这个json文件中全选,复制粘贴到那个网站来生成代码。而不是每次只复制粘贴新增的消息类型到那个网站。
最后效果类似这种。一是消息类型大聚合,二是滥用boost::optional,三是这网站生成的setter代码全是传值(传的boost::optional<T>)。
class MessageType1 {
public:
boost::optional<bool> get_field_1();
set_field_1(boost::optional<bool> value);
......
boost::optional<string> get_field_N();
set_field_N(boost::optional<string> value);
private:
boost::optional<bool> field_1;
......
boost::optional<string> field_N;
};
......
class MessageTypeN {
......
};
class BigStruct {
public:
boost::optional<MessageType1> get_message_type_1();
void set_message_type_1(boost::optional<MessageType1>);
......
boost::optional<MessageTypeN> get_message_type_N();
void set_message_type_N(boost::optional<MessageTypeN>);
private:
boost::optional<MessageType1> message_type_1;
......
boost::optional<MessageTypeN> message_type_N;
};
--
FROM 114.241.228.*