Skip to content

关于 struct_pack struct_json 序列化的问题请教 #701

Answered by poor-circle
Weaverzhu asked this question in Q&A
Discussion options

You must be logged in to vote
  1. struct_json不太可行,因为目前c++的反射机制不支持获取成员的名字,得等C++的官方的反射题案。但是struct_pb应该是可以支持的,field_id可以自动生成,后面会完善。
  2. 实际上,我们在clang下做过编译时间分析,在O3时,编译器前端(包含你说的反射)占用的时间大约只有10%,大头在中后端(代码优化和生成)。字段非常多的情况下,struct_pack编译较慢的可能原因是,因为大量的内联和模板展开导致的代码膨胀。这种情况下,我们建议:
//serialize.hpp
std::string my_serialize(const Foo &foo);
//serialize.cpp
std::string my_serialize(const Foo &foo) {
  return struct_pack::serialize<std::string>(foo);
}

使用时调用my_serialize而非struct_pack::serialize,这样你只需要编译一次serialize.cpp即可。当然代价是多了一次无法内联的函数调用。
3. struct_pack有相关机制,请见介绍。struct_json目前恐怕是不支持的。
4. 无。但我理解json格式天然就是向前向后兼容的。多余的字段应该会被自动忽略,缺失的字段应该会被设置为默认值。

Replies: 2 comments 4 replies

Comment options

You must be logged in to vote
4 replies
@Weaverzhu
Comment options

@Weaverzhu
Comment options

@qicosmos
Comment options

@poor-circle
Comment options

Answer selected by Weaverzhu
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
3 participants